[英]what is -0.0000 in c when using floats and double?
#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。 微小的差异是由于无法将有限整数的数字存储在有限精度数据类型中(发生了一些舍入),并且当您将double更改为float时,必须进行其他舍入。 (请记住,3.141593是二进制表示中的无限周期数,这实际上取决于存储此数字的类型)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.