我有以下程序:
float x = 3.e17;
printf("x = %f", x);
给出了结果:
x = 299999995292024832.000000
为什么结果不是300000000000000000.000000?
答案 0 :(得分:1)
由于浮动精度有限。使用double
可获得更高的精度,但浮点并不总是精确的
答案 1 :(得分:1)
factory :user do
...
confirmed_at DateTime.now
end
(是的,这是一种使用联盟的错误/无效方式,但它恰好起作用了)
#include <stdio.h>
#include <stdlib.h>
union
{
double d;
float f;
unsigned int ui[2];
} myun;
int main ( void )
{
float fx = 3.e17;
double dx = 3.e17;
printf("fx %f\n",fx);
printf("dx %lf\n",dx);
myun.f=fx;
printf("fx 0x%08X\n",myun.ui[0]);
myun.ui[0]++;
printf("fx %lf\n",myun.f);
myun.d=dx;
printf("dx 0x%08X 0x%08X\n",myun.ui[1],myun.ui[0]);
return(0);
}
维基百科指出,单人可以处理多达9位数而不会损失精确度并且可以加倍15-17。所以你的答案是肯定的,不一定需要做一个实验。