0x9*_*x90 2 c floating-point double gcc
#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);
}
Run Code Online (Sandbox Code Playgroud)
当我这样运行时:
./a.out 3.141593
Run Code Online (Sandbox Code Playgroud)
输出是
double = -0.000000 ,float = -0.000000
Run Code Online (Sandbox Code Playgroud)
为什么呢-0.00000?我怎样才能输出0.000000?
我怎么做a == answer?
如果使用2的补码,怎么会有-0值?
浮点数不使用2的补码.它们有符号,指数和尾数,你的数字只有零符号,或者更可能的是,你有一些数字,如-1.0e-15,打印为-0.0000.尝试%e而不是%f.由于无法在有限的精确数据类型(有些舍入发生)中存储具有infinte precission的数字,并且当您将double更改为float时,必须进行额外的舍入.(请记住,3.141593是二进制表示中的无限周期数,这实际上取决于存储此数字的类型)
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |