# Fractions

This post was published 9 years, 2 months ago. Due to the rapidly evolving world of technology, some concepts may no longer be applicable.

For many people the mere mention of fractions elicits a wince, and while these lovely math constructs played a notable role in our early years of math, they are reasonably simple entities. While most humans revisit fractions over many years and often still fail to grasp the concept, for a computer, the elementary operations with fractions (addition, subtraction, multiplication, division, and the necessary greatest common factor (GCF) and lowest common multiple (LCM)) can be coded in just a few lines.

While by no means a perfect class (quite possibly a rather poorly coded class), the following provides some basic functions necessary for working with fractions.

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <?php class frac{ public \$d; public \$n;   public function __construct(\$num, \$den) { \$this->n = \$num; \$this->d = \$den; }   public function gcf(\$n1, \$n2){ if (\$n2>\$n1){ \$tmp = \$n1; \$n1=\$n2; \$n2=\$tmp; } do{ \$rem = \$n1 % \$n2; \$n1 = \$n2; \$n2 = \$rem; }while(\$rem!=0); return \$n1; }   public function lcm(\$n1, \$n2){ return \$n1*(\$n2/frac::gcf(\$n1,\$n2)); }   public function reduce (){ \$g = \$this->gcf(\$this->n,\$this->d); \$this->n /= \$g; \$this->d /= \$g; }   public function multiply (frac \$n1, frac \$n2){ \$f = new frac(\$n1->n*\$n2->n,\$n1->d*\$n2->d); \$f->reduce(); return \$f; }   public function divide (frac \$n1, frac \$n2){ return frac::multiply(\$n1, new frac(\$n2->d,\$n2->n)); }   public function add (frac \$n1, frac \$n2){ \$g = frac::lcm(\$n1->d,\$n2->d); \$f= new frac(\$n1->n*(\$g/\$n1->d)+\$n2->n*(\$g/\$n2->d),\$g); \$f->reduce(); return \$f; }   public function subtract (frac \$n1, frac \$n2){ return frac::add(\$n1, new frac(-1*\$n2->n,\$n2->d)); }   public function display(){ return \$this->n . "/" . \$this->d; } } ?>```

Examples of use:
1/3 + 1/2:

```1 2 3 4 5 6 <?php \$f1 = new frac(1,3); \$f2 = new frac(1,2); \$ans = frac::add(\$f1,\$f2); echo \$ans->display(); ?>```

1/8 * 2/5

```1 2 3 4 5 6 <?php \$f1 = new frac(1,8); \$f2 = new frac(2,5); \$ans = frac::multiply(\$f1,\$f2); echo \$ans->display(); ?>```

The `gcf` function uses Euclid’s algorithm, and the `lcm` function (used to find the common denominator) calls the `gcf` function.

Given the significant disparity between the ease with which a computer can ‘learn’ fractions, and the difficulty encountered by most students, perhaps it is time to consider teaching fractions as a series of concrete steps – an algorithm – instead of the current method. (Granted, most current methods do provide a method for arriving at an answer, but especially for the determination of the lowest common denominator (or reducing fractions), a procedural methodology (e.g. prime factoring, Euclid’s method, etc) is rarely given.)