我正在尝试执行以下操作:
double exponent = pow(2.0, -254)
我得到的结果是'inf',实际结果是:3.4544e-77,这是一个非常小的数字,我猜我可以得到'0'但我得'inf'。
我需要实际结果,有没有办法提高双精度?我也试过很长时间没有成功。
我正在使用Visual Studio在C上编程。
答案 0 :(得分:2)
在C中,您可以使用scalb
乘以2的幂,因此scalb(1, -254)
为2 -254 。您还可以在十六进制浮点常量中使用2的幂; 2 -254 是0x1p-254
。
但是,pow(2.0, -254)
不会返回无穷大。如果您尝试打印返回值,并且打印了“inf”,则源代码中会出错。
答案 1 :(得分:0)
是的,问题出在我的源代码中,原始代码是:
#include <math.h>
void main()
{
unsigned int scale = 1;
unsigned int bias = 255;
double temp = pow(2.0, scale - bias);
printf("Number is: %e\n", temp);
return;
}
我猜测操作&#39; scale-bias&#39;因为它们是UINTS而溢出,因此给我一个&#39; inf&#39;,将它们改为INT解决了这个问题:
#include <math.h>
void main()
{
int scale = 1;
int bias = 255;
double temp = pow(2.0, scale - bias);
printf("Number is: %e\n", temp);
return;
}