У меня есть простой код:NetBSD длинный двойной неприятности
#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
FYI
/usr/include/x86/float.h
определяет как LDBL_MIN
как 3.3621031431120935063E-4932L
И это значение больше, чем результат PRINTF.
Было бы интересно посмотреть, как результат 'й = 3.3622e-4932L;' что-то чуть больше. – chux
Он печатает правильное значение 3.362200e-4932 – sibnick