c - 使用 float 和 double 时,c 中的 -0.0000 是什么?

标签 c gcc floating-point 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

如何制作==答案


用2的补码怎么会有-0值呢?

最佳答案

float 不使用 2 的补码。它们有符号、指数和尾数,而您的数字只有带符号的零,或者更可能的是,您有一些数字,如 -1.0e-15,打印为 -0.0000。试试 %e 而不是 %f。细微差别是由于无法在有限精度数据类型中存储具有无限精度的数字(发生了一些舍入),并且当您将 double 更改为 float 时,必须进行额外的舍入。 (请记住,3.141593 是二进制表示的无限周期数,这实际上取决于该数字存储在哪种类型中)

关于c - 使用 float 和 double 时,c 中的 -0.0000 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175218/

相关文章:

gcc - 如何设置 CLion 来编译和运行?

c++ - 推荐的 GCC 发布构建标志

在 C 中链接 2 个字符串

c - Linux API "system"

c - 在字符串连接中没有得到所需的输出

C宏返回一个结构

c++ - 错误:使用已删除的函数 boost::shared_mutex::shared_mutex

C中带有 float 的现金分配错误

C语言 float 脑力破坏者

c - 迭代时 float 不精确