Float в бинарный код и обратно
Через РНР генерирую числа и с помошью pack преобразовываю их в бинарный код для последующей записи в файл. Потом, через JavaScript, получаю этот файл и вытаскиваю оттуда массив float чисел, используя формулу:
Math.pow(-1,S) * Math.pow(2,E-Math.pow(2,(b-1))+1) * (1+M/Math.pow(2,n))
где S - первый бит; E - целая часть; M - остаток мантиссы; b и n - количество бит под целую часть и мантиссу.
В результате в РНР получил следующее число - 782.662037
.
Получаю файл через JS и "достаю" оттуда мое число, получилось: 783.9998168945312
.
И так с многими числами, а точнее с определенными интервалами, например, число 1035,*\*\*\*
получается больше, чем 2000,\*\*\*\*
.
В чем причина таких непредсказуемых результатов?