【发布时间】:2014-05-23 10:29:45
【问题描述】:
我有一些常量要转换,它们的定义如下:
0x1.0p-126f
0x1.fffffep127f
0x1.0p-23f
我怎样才能准确地转换它们?
顺便说一句,这是因为 Visual Studio 不支持这种表示法!!
【问题讨论】:
标签: floating-point
我有一些常量要转换,它们的定义如下:
0x1.0p-126f
0x1.fffffep127f
0x1.0p-23f
我怎样才能准确地转换它们?
顺便说一句,这是因为 Visual Studio 不支持这种表示法!!
【问题讨论】:
标签: floating-point
在非 C99 兼容的编译器中,您可以编写:
0x1.0p-126f -> ldexp (1.0, -126)
0x1.fffffep127f -> ldexp(0x1fffffe, 127 - 4 * 6)
0x1.0p-23f -> ldexp(1.0, -23)
在第二个示例中,6 是点之后的十六进制数字的数量。原版有0x1.fffffe,所以当我写整数0x1fffffe时,我从点后移到点前的每个数字都写了24倍的数量,应该补偿使用第二个参数。
函数ldexp()是标准的:
概要
#include <math.h> double ldexp(double x, int n);描述
The ldexp() functions multiply x by 2 to the power n.
如果这些表达式出现在需要常量表达式的地方,那么函数调用不是可接受的替代品。
在这种情况下,只需使用 C 程序和格式 %.16e 打印 ldexp() 调用的结果,并使用打印的值代替原始值。
【讨论】: