在c中表示浮点数
Representing floating point numbers in c
我了解到浮点数是按照 IEEE 754 表示法存储的,如果无法表示该数字,有时会显示近似值。
我编写了以下代码,其中我提取小数部分然后在循环内将其乘以 10 九次。在循环结束时,值为 142000000.000000(变量 g)。
我在循环外再次将它乘以 10,结果为 1419999999.999999.
我将在 for 循环内计算的值显式存储在另一个变量 (k) 中,并将其乘以 10,得到的结果为 1420000000.000000.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
f
的初始值为3.142
。该值无法准确表示,因此对该值的任何操作也将导致不准确的值。这就是为什么你最终打印出一个不准确的值。
相比之下,k
的初始值是142000000.000000
,可以表示为double
。将这个值乘以 10 仍然得到一个可以精确表示的值。
我了解到浮点数是按照 IEEE 754 表示法存储的,如果无法表示该数字,有时会显示近似值。
我编写了以下代码,其中我提取小数部分然后在循环内将其乘以 10 九次。在循环结束时,值为 142000000.000000(变量 g)。 我在循环外再次将它乘以 10,结果为 1419999999.999999.
我将在 for 循环内计算的值显式存储在另一个变量 (k) 中,并将其乘以 10,得到的结果为 1420000000.000000.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
f
的初始值为3.142
。该值无法准确表示,因此对该值的任何操作也将导致不准确的值。这就是为什么你最终打印出一个不准确的值。
相比之下,k
的初始值是142000000.000000
,可以表示为double
。将这个值乘以 10 仍然得到一个可以精确表示的值。