Подробности

[В начало]

Проблема в стандарте № 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

[В начало]