如果你打印的浮点数比存储在存储器中的精度更高,那么它们不应该是额外的零点吗?我有这样的代码:
double z[2*N]="0";
...
for( n=1; n<=2*N; n++) {
fprintf( u1, "%.25g", z[n-1]);
fputc( n<2*N ? ',' : '\n', u1);
}
Run Code Online (Sandbox Code Playgroud)
这是创建这样的输出:
0,0.7071067811865474617150085,....
一个浮点数应该只有17个小数位(右边?不是53位到17个小数位).如果是这样的话,那么第18,19 ...... 25位应该有零.请注意,在上面的输出中,它们的数字不是0.
我误会了什么吗?如果是这样,什么?
不,53位意味着17个小数位是你可以信任的,但是因为我们使用的base-10表示法存在于双精度存储的二进制基数(二进制),后面的数字只是因为1/2 53不完全是1/10 ^ n,即
1/2 ^ 53 = .000000000000000111022302462515654042363166809082031250000000000000000
归档时间: |
|
查看次数: |
251 次 |
最近记录: |