#include <stdio.h>
#include <stdlib.h>
#define answer 3.141593
void main(int argc, char **argv) {
float a = (argc - 2)?: strtod(argv[1], 0);
printf("double = %lf ,float = %f", a-answer , a-answer);
}
当我这样运行时:
./a.out 3.141593
输出是
double = -0.000000 ,float = -0.000000
为什么会这样-0.00000
?我怎样才能让它输出0.000000
?
我怎样才能使a == answer
?
如果使用2的补码,怎么会有-0值呢?
浮点数不使用 2 的补码。它们有符号、指数和尾数,而你的数字只有带符号的零,或者更可能的是,你有一些像 -1.0e-15 这样的数字,它被打印为 -0.0000。尝试使用 %e 而不是 %f。微小的差异是由于无法在有限精度数据类型中存储无限精度的数字(发生了一些舍入),并且当您将双精度更改为浮点时,必须进行额外的舍入。 (请记住,3.141593 是二进制表示的无限周期数,这实际上取决于该数字存储的类型)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)