【发布时间】:2016-05-07 12:44:10
【问题描述】:
我有简单的代码:
#include <stdio.h>
int main()
{
//char d[10] = {0x13, 0x43, 0x9b, 0x64, 0x28, 0xf8, 0xff, 0x7f, 0x00, 0x00};
//long double rd = *(long double*)&d;
long double rd = 3.3621e-4932L;
printf("%Le\n", rd);
return 0;
}
在我的 Ubuntu x64 上,它按预期打印 3.362100e-4932。在我的 NetBSD 上打印 1.681050e-4932
为什么会发生,我该如何解决?我尝试 clang 和 gcc 得到相同的结果。
我的系统(VirtualBox 5.0 中的虚拟机):
uname -a
NetBSD netbsd.home 7.0 NetBSD 7.0 (GENERIC.201509250726Z) amd64
gcc --version
gcc (nb2 20150115) 4.8.4
clang --version
clang version 3.6.2 (tags/RELEASE_362/final)
Target: x86_64--netbsd
Thread model: posix
仅供参考
/usr/include/x86/float.h 定义为 LDBL_MIN 为 3.3621031431120935063E-4932L 并且这个值大于 printf 结果。
【问题讨论】:
-
看看
rd = 3.3622e-4932L;的结果会很有趣,有点大。 -
打印正确的值 3.362200e-4932
-
作为记录,Freebsd 打印出正确的结果。
标签: c floating-point netbsd