提高小数字

时间:2018-03-12 18:59:17

标签: c double precision

我正在尝试执行以下操作:

double exponent = pow(2.0, -254)

我得到的结果是'inf',实际结果是:3.4544e-77,这是一个非常小的数字,我猜我可以得到'0'但我得'inf'。

我需要实际结果,有没有办法提高双精度?我也试过很长时间没有成功。

我正在使用Visual Studio在C上编程。

2 个答案:

答案 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;
}