Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

Цитируя от Википедия:

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

и

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

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

Другие советы

Для современных компиляторов на X64, Clang и GCC использует 16-байт двойной для long double Пока VC ++ использует 8-байтовый двойной. Другими словами, с Clang и GCC вы получаете более высокую точность двойной, но для VC ++ long double такое же как и double. Отказ Современные процессоры X86 поддерживают эти 16-байтовые удваивания, поэтому я думаю, что Clang и GCC делают правильные вещи и позволяют получить доступ к возможному аппаратному обеспечению более низкого уровня с использованием примитивов языка более высокого уровня.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top