Подтвердить что ты не робот

Длинный двойной против двойной

Я знаю, что размер различных типов данных может меняться в зависимости от того, в какой системе я включен. Я использую XP 32bits и используя оператор sizeof() в С++, кажется, что long double равен 12 байтам, а double - 8.

Однако большинство основных источников заявляют, что long double равен 8 байтам, поэтому диапазон является таким же, как и double.

Откуда у меня 12 байт? Если long double действительно составляет 12 байтов, разве это не расширяет диапазон значений? Или длинная подпись используется только (цифры компилятора), когда значение превышает диапазон двойника и, следовательно, выходит за пределы 8 байтов?

Спасибо.

4b9b3361

Ответ 1

Цитата из Wikipedia:

В архитектуре x86 большинство компиляторов реализуют long double как 80-битный расширенный тип точности, поддерживаемый этим оборудованием (иногда хранятся как 12 или 16 байт для поддержки структуры данных.

и

Компиляторы могут также использовать long double для 128-битного четырехкратного формата точности, который в настоящее время реализован в программном обеспечении.

Другими словами, да, a long double может хранить более широкий диапазон значений, чем a double. Но это полностью зависит от компилятора.

Ответ 2

Что касается моего новичка программирования, подскажите:

  • Использовать периодический нормализованный float [-1.0, + 1.0]

  • Удерживайте нормализующее значение отдельно с двойным или длинным двойным

  • Нормализация вводит шум = небольшие ошибки = высокие частоты до значения переменных

  • Время от времени полезно нормализовать с сохранением медианного значения отдельно и сохранить сортировку данных (исходный порядок данных может быть сохранен как вектор перестановки)

Ответ 3

Стандартные размеры байтов для чисел - это гарантированные минимальные размеры на всех платформах. Они могут быть больше на некоторых системах, но они никогда не будут меньше.