繁体   English   中英

如何找到浮点数的最短表示

[英]How can I find the shortest representation of a floating-point number

如果我尝试为该类型打印具有最大精度的浮点值,例如:

printf("%.100e", FLT_MIN);

我明白了:

1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625000000000000e-38

但是,如果我尝试打印这样的内容(我更改了尾数的最后一位):

float x = 1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515610e-38f;
printf("%.100e", x);

那么output也是一样的:

1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625000000000000e-38

这是因为我输入的值没有精确的表示,所以它被四舍五入了。

问题是:如何找到四舍五入到相同数字的最短值(以数字表示)?

您可以使用 C99 中引入的十六进制浮点数。

#include <stdio.h>

int main() {
    float x = 1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625000000000000e-38;
    printf("%a\n", x); // prints 0x1p-126
    float hx = 0x1p-126;
    printf("%a\n", hx); // prints 0x1p-126
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM