За последние 24 часа нас посетили 19205 программистов и 1647 роботов. Сейчас ищут 705 программистов ...

Как работать с float extended в PHP?

Тема в разделе "Прочие вопросы по PHP", создана пользователем gorec2005, 9 июл 2009.

  1. gorec2005

    gorec2005 Активный пользователь

    С нами с:
    9 июл 2009
    Сообщения:
    3
    Симпатии:
    0
    Как работать с float extended в PHP?
    а конкретно - есть задача - из sql получаются данные типа float после этого эти данные надо в разместить в бинарную строку в формате ieee754 (type float double extended) 80-bit
    т.е. сделать что-то вроде http://babbage.cs.qc.cuny.edu/IEEE-754/Decimal.html
    насколько я понимаю на тек. момент php штатно не работает с подобным представлением - как это можно реализовать своей функцией?
     
  2. gorec2005

    gorec2005 Активный пользователь

    С нами с:
    9 июл 2009
    Сообщения:
    3
    Симпатии:
    0
    Это конечно хорошо - точность... а каким образом мне конкретно указать, что использовать представление в памяти 80-ти битное? у меня задача стоит - конкретно extended float (80bit) причем мне нужно всего две ф-ции - str2float80bit и float80bit2str где str - строковое представление числа с плавающей запятой например 52,01927834 или 47,748208323455, а float80bit - 10 байт для размещения в памяти.
     
  3. gorec2005

    gorec2005 Активный пользователь

    С нами с:
    9 июл 2009
    Сообщения:
    3
    Симпатии:
    0
    вот черновой вариант того, что мне было надо...
    function float2ieee80bit($float) {
    $x=pack('d', $float);
    $x = join('',array_reverse(preg_split('//',$x,-1,PREG_SPLIT_NO_EMPTY)));
    $str_x = join('',array_reverse(preg_split('//',str2bin($x),-1,PREG_SPLIT_NO_EMPTY)));
    $my = unpack ("a52mantissa/a11exponent/a1sign",$str_x);
    $m=$my['mantissa']; $e=$my['exponent']; $s=$my['sign'];
    $e="001000000000001"; $ie80="00000000000".$m."1".$e.$s; // тут весьма "грязный" хак - но для моих диапазонов значений вполне прокатит...
    $bie80=bin2str($ie80);
    return $bie80;
    }