提问人:DarkAtom 提问时间:5/10/2021 更新时间:5/11/2021 访问量:373
如何找到浮点数的最短表示形式
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);
然后输出是一样的:
1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625000000000000e-38
这是因为我输入的值没有确切的表示,所以它被舍入了。
问题是:我怎样才能找到四舍五入到相同数字的最短值(以数字表示)?
答:
1赞
tstanisl
5/11/2021
#1
您可以使用 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
}
评论
0赞
DarkAtom
5/11/2021
是的,但我知道,但我希望它以 10 为基数(E 表示法)。
评论
snprintf
%.1g
printf("%.e\n", FLT_DECIMAL_DIG-1, some_float);
"%g"
"%a"