我有一些常量要转换,它们被定义如下:
0x1.0p-126F
0x1.fffffep127f
0x1.0p-23F
如何准确转换它们?
BTW,这是因为Visual Studio不支持这种表示法!!答案 0 :(得分:2)
在非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
时,我写了一个数量2 4 倍的每个数字,我从点之后转移到点之前,应该用第二个论点来补偿。
函数ldexp()
是标准的:
概要
#include <math.h> double ldexp(double x, int n);
说明
The ldexp() functions multiply x by 2 to the power n.
如果这些表达式出现在需要常量表达式的位置,则函数调用不是可接受的替代。
在这种情况下,只需使用C程序和格式ldexp()
打印%.16e
调用的结果,然后使用打印值替换原始值。