在c中表示浮点数

时间:2017-03-13 17:56:49

标签: c ieee-754

我已经读过根据IEEE 754表示存储浮动数字,如果无法表示数字,有时会显示近似值。

我编写了以下代码,其中我提取小数部分,然后在循环内将其乘以10次。在循环结束时,值为142000000.000000(变量g)。 我在循环外再次乘以10得到的结果为1419999999.999999。

我将在for循环中计算的值显式存储在另一个变量(k)中,并将其乘以10得到结果为1420000000.000000

你能否告诉我为什么能够在第二个实例中正确存储值的差异(在变量k中)。

#include<stdio.h>
#include<math.h>
int main()
{
    double f=3.142,g,i;
    int j;
    g=modf(f,&i);

    printf("Inside loop");
    for(j=1;j<=9;j++)
    {
        g = g * 10.0;
        printf("\n%lf",g);
    }
    printf("\nLoop ends");

    g = g * 10.0;
    printf("\nThe value of g is %lf",g);

    double k = 142000000.000000;
    k = k * 10.0;
    printf("\nThe value of k is %lf",k);
}

输出

内循环

1.420000

14.200000

142.000000

1420.000000

14200.000000

142000.000000

1420000.000000

14200000.000000

142000000.000000

循环结束

g的值是1419999999.999999

k的值是1420000000.000000

1 个答案:

答案 0 :(得分:2)

f的初始值为3.142。此值无法准确表示,因此对此值的任何操作也将导致不精确的值。这就是为什么你最终最终打印出一个不准确的价值。

相比之下,k的初始值为142000000.000000,其中可以完全表示为double。将此值乘以10仍会得到一个可以准确表示的值。