标签: ieee-754

如何在Javascript中将浮点数转换为二进制表示(IEEE 754)?

在Javascript中将浮点数转换为二进制表示形式的最简单方法是什么?(例如1.0 - > 0x3F800000).

我试图手动完成,这在一定程度上(通常的数字)起作用,但是对于非常大或非常小的数字(没有范围检查)和特殊情况(NaN,无穷大等)都会失败:

function floatToNumber(flt)
{
    var sign = (flt < 0) ? 1 : 0;
    flt = Math.abs(flt);
    var exponent = Math.floor(Math.log(flt) / Math.LN2);
    var mantissa = flt / Math.pow(2, exponent);

    return (sign << 31) | ((exponent + 127) << 23) | ((mantissa * Math.pow(2, 23)) & 0x7FFFFF);
}
Run Code Online (Sandbox Code Playgroud)

我重新发明轮子了吗?

编辑:我改进了我的版本,现在它处理特殊情况.

function assembleFloat(sign, exponent, mantissa)
{
    return (sign << 31) | (exponent << 23) | (mantissa);
}

function floatToNumber(flt)
{
    if (isNaN(flt)) // Special case: NaN
        return …
Run Code Online (Sandbox Code Playgroud)

javascript floating-point binary ieee-754

21
推荐指数
2
解决办法
8774
查看次数

IEEE-754数据的压缩算法

任何人都建议一个良好的压缩算法,适用于双精度浮点值?我们发现浮点值的二进制表示使用常见的压缩程序(例如Zip,RAR,7-Zip等)导致非常差的压缩率.

我们需要压缩的数据是一个8字节值的一维数组,以单调递增的顺序排序.这些值表示开尔文温度,跨度通常低于100度.值的数量范围从几百到最多64K.

澄清

  • 数组中的所有值都是不同的,但由于表示浮点值的方式,在字节级别确实存在重复.

  • 由于这是科学数据,因此需要无损算法.如果存储效率有显着提高,则可以接受以足够精度(~5位小数)转换为定点表示.

更新

找到一篇关于这个主题的有趣文章.不确定该方法对我的要求的适用程度.

http://users.ices.utexas.edu/~burtscher/papers/dcc06.pdf

compression floating-point ieee-754

20
推荐指数
3
解决办法
4209
查看次数

如何从十进制数转换为IEEE 754单精度浮点格式?

如何手动将十进制(基数为10)的数字转换为IEEE 754单精度浮点格式?我知道它有三个部分,一个符号,一个指数和一个尾数.我只是不完全理解最后两个部分实际代表什么.

floating-point binary ieee-754

20
推荐指数
3
解决办法
8万
查看次数

确保C++双精度数为64位

在我的C++程序中,我需要从外部字节序列中提取64位浮点数.有没有办法确保在编译时双打是64位?我应该使用其他类型来存储数据吗?

编辑:如果您正在阅读本文并实际寻找确保以IEEE 754格式存储的方法,请查看下面的Adam Rosenfield的答案.

c++ compiler-construction precision types ieee-754

19
推荐指数
6
解决办法
1万
查看次数

在双打中表示整数

一个double(给定数量的字节,具有合理的尾数/指数平衡)是否总能完全精确地保持无符号整数的范围是该字节数的一半?

例如,8字节双精度可以完全精确地保持四字节无符号整数的范围吗?

这将归结为如果两个字节的浮点数可以保持一个字节无符号整数的范围.

一个字节的无符号int当然是0 - > 255.

c math floating-point precision ieee-754

19
推荐指数
2
解决办法
6539
查看次数

为什么这个循环永远不会结束?

可能重复:
比较C#中的double值时出现问题

我在其他地方读过它,但是真的忘记了答案,所以我再次问这里.无论你用任何语言编写它,我都不会结束这个循环(我用C#,C++,Java测试它):

double d = 2.0;
while(d != 0.0){
   d = d - 0.2;
}
Run Code Online (Sandbox Code Playgroud)

floating-point ieee-754

19
推荐指数
3
解决办法
1054
查看次数

检测在C++中存储为double的负0

我正在做一些数学计算(尝试使用VS2010将Matlab代码转换为C++),我需要能够判断在某些时候我得到负0.

根据IEEE标准-0/+ 0仅在符号位上有所不同(其余为0).

我使用下面的代码(post)将我的double解释为unsigned char

double f = -5;
    unsigned char *c = reinterpret_cast<unsigned char *>(&f);
    for(int i=(sizeof(double)-1); i>=0; i--){
        printf("%02X", c[i]);
   }
Run Code Online (Sandbox Code Playgroud)

尝试用5/-5我得到预期的结果:

C014000000000000 (-5)
4014000000000000 (5)
Run Code Online (Sandbox Code Playgroud)

但是当我用0/-0尝试它时,我在这两种情况下都只得到零.VS2010声称它们符合IEEE标准(msdn),所以我不确定它的哪一部分我没有得到.

如果0/-0确实以完全相同的方式存储在内存中,我无法分辨它是否需要,所以我应该停止浪费时间:)对吗?

c++ double ieee-754

19
推荐指数
2
解决办法
4550
查看次数

使用python从二进制文件中读取32位带符号的ieee 754浮点数?

我有一个二进制文件,它是一个简单的有符号32位ieee754浮点数的列表.它们没有被任何东西分开,只是一个接一个地出现直到EOF.

我如何读取此文件并将其正确解释为浮点数?

我尝试使用read(4),但它会自动将它们转换为带有ascii编码的字符串.

我也尝试过使用,bytearray但我只需要一次1个字节,而不是一次4个字节.

python floating-point parsing binaryfiles ieee-754

19
推荐指数
2
解决办法
2万
查看次数

将IEEE 754 double转换为字符串的算法?

许多使用IEEE 754双精度的编程语言提供了一个库函数来将这些双精度转换为字符串.例如,C有sprintf,C++有stringstream,Java有Double.toString,等等.

在内部,这些功能是如何实现的?也就是说,他们使用什么算法将double转换为字符串表示,因为它们经常受到程序员选择的精度限制?

谢谢!

language-agnostic string algorithm floating-point ieee-754

19
推荐指数
3
解决办法
7758
查看次数

为什么将Double.NaN转换为int不会在Java中抛出异常?

所以我知道IEEE 754为非实数的值指定了一些特殊的浮点值.在Java中,铸造这些值的原始int不会抛出异常像我本来期望.相反,我们有以下内容:

int n;
n = (int)Double.NaN; // n == 0
n = (int)Double.POSITIVE_INFINITY; // n == Integer.MAX_VALUE
n = (int)Double.NEGATIVE_INFINITY; // n == Integer.MIN_VALUE
Run Code Online (Sandbox Code Playgroud)

在这些情况下抛出异常的理由是什么?这是IEEE标准,还是仅仅是Java设计者的选择?如果这种演员阵容有例外情况,我是否会发现不良后果?

java floating-point casting ieee-754

18
推荐指数
2
解决办法
6578
查看次数