Я занимаюсь разработкой программного обеспечения А.С. Программа на получение степени в местном колледже. Я хочу опередить мою программу обучения в колледже (которая мне кажется слишком упрощенной). Итак, я изучаю разные языки и технологии везде, где могу (онлайн).
Я решил пройти курс Microsoft C ++ по edX.
Согласно им, double и long double одинаковы по размеру и диапазону (см. Скриншот ниже). Это противоречит этим спецификациям:
https://en.wikipedia.org/wiki/C_data_types
Сначала я думал, что Microsoft сделает опечатку, но потом я нашел эта почта:
В архитектуре x86 большинство компиляторов реализуют long double как
80-битный тип расширенной точности, поддерживаемый этим оборудованием (иногда
хранится как 12 или 16 байтов для поддержания структуры данных.а также
Компиляторы также могут использовать long double для 128-битной четверной точности
формат, который в настоящее время реализован в программном обеспечении.Другими словами, да, длинный дубль может хранить больший диапазон
значений, чем двойной. Но это полностью зависит от компилятора.
Итак, я подумал про себя, что в большинстве случаев (то есть в большинстве реализаций компилятора) Microsoft ошибается, но в некоторых случаях они могут быть правы.
Но потом я пересмотрел стандарт C ++ 11. И вот что это говорит:
Существует три типа с плавающей точкой: float, double и long double.
Тип double обеспечивает как минимум такую же точность, как и float, и
Тип long double обеспечивает как минимум такую же точность, как double.
набор значений типа float является подмножеством набора значений
тип двойной; набор значений типа double является подмножеством
множество значений типа long double.
Расплывчато, верно?
Итак, вот вопрос: C ++ существует уже давно. Почему до сих пор нет единого стандарта для такого рода вещей? Намеренно ли это ради гибкости — каждый сам решает, какими будут эти типы данных. Или они просто не могут получить всех на борту?
Спасибо.
Скриншот:
Microsoft C ++ на edX
Постскриптум Я все еще думаю, что Microsoft должна была написать это по-другому: что-то вроде «Long Double имеет такой же размер, как double или больше (до … байтов)».
Задача ещё не решена.
Других решений пока нет …