Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.8.141] |
|
Сообщ.
#1
,
|
|
|
Изучал тут файл один из GCC: "\libgfortran\intrinsics\c99_functions.c" и такое увидел:
long double log10l (long double x) { #if LDBL_MAX_EXP > DBL_MAX_EXP if (x > DBL_MAX) { double val; int p2_result = 0; if (x > 0x1p16383L) { p2_result += 16383; x /= 0x1p16383L; } if (x > 0x1p8191L) { p2_result += 8191; x /= 0x1p8191L; } if (x > 0x1p4095L) { p2_result += 4095; x /= 0x1p4095L; } if (x > 0x1p2047L) { p2_result += 2047; x /= 0x1p2047L; } if (x > 0x1p1023L) { p2_result += 1023; x /= 0x1p1023L; } val = log10 ((double) x); return (val + p2_result * .30102999566398119521373889472449302L); } #endif #if LDBL_MIN_EXP < DBL_MIN_EXP if (x < DBL_MIN) { double val; int p2_result = 0; if (x < 0x1p-16380L) { p2_result += 16380; x /= 0x1p-16380L; } if (x < 0x1p-8189L) { p2_result += 8189; x /= 0x1p-8189L; } if (x < 0x1p-4093L) { p2_result += 4093; x /= 0x1p-4093L; } if (x < 0x1p-2045L) { p2_result += 2045; x /= 0x1p-2045L; } if (x < 0x1p-1021L) { p2_result += 1021; x /= 0x1p-1021L; } val = fabs (log10 ((double) x)); return (- val - p2_result * .30102999566398119521373889472449302L); } #endif return log10 (x); } |
Сообщ.
#2
,
|
|
|
это шестнадцатеричная запись числа с плавающей запятой, после `p` идет экспонента (как после `E` в десятичной записи)
|
Сообщ.
#3
,
|
|
|
Это "штучки" C99. Видимо плагин FAR-а такое еще не понимает.
0x1p-16380L = 1.0 * 2^(-16380) ~= 1.34484e-4931 здесь пример |
Сообщ.
#4
,
|
|
|
Спасибо всем. Видимо, здешний парсер-краситель тоже не идеален... Печалька.
|
Сообщ.
#5
,
|
|
|
Хм-м... а расширили ли двоичную запись для плавающих?
Т.е. нечто вида 0b0110011p11011 ? |
Сообщ.
#6
,
|
|
|
Не, это только для
Цитата 2) The exponent syntax for hexadecimal floating-point constant link Может в пропозалах кто-то что-то и написал, но вряд ли это имеет смысл. Шестнадцатиричная запись компактнее и проще воспринимается, чем двоичная. |