Exemplo n.º 1
0
 function Float2String($floatvalue, $bits)
 {
     // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html
     switch ($bits) {
         case 32:
             $exponentbits = 8;
             $fractionbits = 23;
             break;
         case 64:
             $exponentbits = 11;
             $fractionbits = 52;
             break;
         default:
             return false;
             break;
     }
     if ($floatvalue >= 0) {
         $signbit = '0';
     } else {
         $signbit = '1';
     }
     $normalizedbinary = NormalizeBinaryPoint(Float2BinaryDecimal($floatvalue), $fractionbits);
     $biasedexponent = pow(2, $exponentbits - 1) - 1 + $normalizedbinary['exponent'];
     // (127 or 1023) +/- exponent
     $exponentbitstring = str_pad(decbin($biasedexponent), $exponentbits, '0', STR_PAD_LEFT);
     $fractionbitstring = str_pad(substr($normalizedbinary['normalized'], 2), $fractionbits, '0', STR_PAD_RIGHT);
     return BigEndian2String(Bin2Dec($signbit . $exponentbitstring . $fractionbitstring), $bits % 8, false);
 }
function Float2String($floatvalue, $bits)
{
    // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html
    if ($bits != 32 && $bits != 64) {
        return FALSE;
    } else {
        if ($bits == 32) {
            $exponentbits = 8;
            $fractionbits = 23;
        } else {
            if ($bits == 64) {
                $exponentbits = 11;
                $fractionbits = 52;
            }
        }
    }
    if ($floatvalue >= 0) {
        $signbit = '0';
    } else {
        $signbit = '1';
    }
    $normalizedbinary = NormalizeBinaryPoint(Float2BinaryDecimal($floatvalue), $fractionbits);
    $biasedexponent = pow(2, $exponentbits - 1) - 1 + $normalizedbinary['exponent'];
    // (127 or 1023) +/- exponent
    $exponentbitstring = str_pad(decbin($biasedexponent), $exponentbits, '0', STR_PAD_LEFT);
    $fractionbitstring = str_pad(substr($normalizedbinary['normalized'], 2), $fractionbits, '0', STR_PAD_RIGHT);
    return BigEndian2String(Bin2Dec($signbit . $exponentbitstring . $fractionbitstring), $bits % 8, FALSE);
}