small inaccuracies

Posted on 16th Feb 2014 by admin

I have this code to convert fractional base 10 into base 2:

while($num > 0)
{
echo "<tr><td>". $num." * 2 = </td><td>". $num*2 ."</td></tr>";
$num= $num*2;
if($num>= 1)
{ $num-= 1; $bin .= "1"; }
else
{ $bin .= "0"; }
}

anyway, stuff gets off, example:

Quote0.7 * 2 = 1.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.799999999999
0.799999999999 * 2 = 1.6
0.599999999999 * 2 = 1.2
0.199999999997 * 2 = 0.399999999994
0.399999999994 * 2 = 0.799999999988
0.799999999988 * 2 = 1.59999999998
0.599999999977 * 2 = 1.19999999995
0.199999999953 * 2 = 0.399999999907
0.399999999907 * 2 = 0.799999999814
0.799999999814 * 2 = 1.59999999963
0.599999999627 * 2 = 1.19999999925
0.199999999255 * 2 = 0.39999999851
0.39999999851 * 2 = 0.79999999702
0.79999999702 * 2 = 1.59999999404
0.59999999404 * 2 = 1.19999998808
0.199999988079 * 2 = 0.399999976158
0.399999976158 * 2 = 0.799999952316
0.799999952316 * 2 = 1.59999990463
0.599999904633 * 2 = 1.19999980927
0.199999809265 * 2 = 0.39999961853
0.39999961853 * 2 = 0.799999237061
0.799999237061 * 2 = 1.59999847412
0.599998474121 * 2 = 1.19999694824
0.199996948242 * 2 = 0.399993896484
0.399993896484 * 2 = 0.799987792969
0.799987792969 * 2 = 1.59997558594
0.599975585938 * 2 = 1.19995117188
0.199951171875 * 2 = 0.39990234375
0.39990234375 * 2 = 0.7998046875
0.7998046875 * 2 = 1.599609375
0.599609375 * 2 = 1.19921875
0.19921875 * 2 = 0.3984375
0.3984375 * 2 = 0.796875
0.796875 * 2 = 1.59375
0.59375 * 2 = 1.1875
0.1875 * 2 = 0.375
0.375 * 2 = 0.75
0.75 * 2 = 1.5
0.5 * 2 = 1
obviously, 0.4 * 2 does not equal 0.799999999999

how can i fix these inaccuracies?

Other forums