Подробности
[В начало]
Проблема в стандарте № S0620
Краткое описание
Константа HUGE_VALL некорректно определена для архитектур ppc32, ppc64, s390 и s390x
Подробное описание
Константа HUGE_VALL определена в LSB 3.1 в generic части (раздел 13.7.3. math.h) следующим образом:
#define HUGE_VALL 0x1.0p32767L
Это верно для архитектур x86, x86-64 и ia64, где LSB определяет тип long double как тип 128-битных(96-битных) чисел с плавающей точкой. В тоже время long double на архитектурах ppc32, ppc64, s390 и s390x определяется в LSB как 64-битный тип чисел с плавающей точкой.
То есть на этих архитектурах константа HUGE_VALL должна совпадать с HUGE_VAL и равняться 0x1.0p2047.
Раздел стандарта
Linux Standard Base Core Specification 3.1, Chapter 13. Base Libraries, 13.7. Data Definitions for libm, 13.7.3. math.h
Способы устранения
Определение константы HUGE_VALL должно быть архитектурно зависимым. Для архитектур x86, x86-64 и ia64 его необходимо оставить с текущим значением:
#define HUGE_VALL 0x1.0p32767L
а для архитектур ppc32, ppc64, s390 и s390x определить с новым значением:
#define HUGE_VALL 0x1.0p2047L
Принято
LSB Bugzilla, 1760
Статус
Исправлена в LSB 3.2
[В начало]