使用浮动和双倍时,c中的-0.0000是多少?

#include  #include  #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。 由于无法在有限的精确数据类型(存在一些舍入)中存储具有infinte precission的数字,并且当您将double更改为float时,必须进行额外的舍入。 (请记住,3.141593是二进制表示中的无限周期数,这实际上取决于存储此数字的类型)