我刚才在使用gdb打印一个double类型的值时,惊讶地看到它打印出了-0。
在C语言中,什么是-0的double值?
顺便说一下,当我用0进行比较时,返回了true:我只需执行以下操作进行比较:
在gdb中
> print some_double
-0
> print some_double == 0
1
printf
的众所周知的问题。由于您使用的是浮点数,因此在二进制中可能不存在一种表示方式。大多数情况下,二进制表示并不完美,因此0有时被存储为0.00000000000000...0042
,有时则被存储为-0.000000000000000000000123
。当printf打印第二个值时,您会得到奇怪的-0。a == b
,而是编写fabs(a-b) < 1e-13
,其中1e-13是epsilon(选择适合您的指数)。