Почему c / c ++ типы с плавающей запятой так странно названы? - PullRequest
15 голосов
/ 30 декабря 2008

C ++ предлагает три типа с плавающей точкой: float, double и long double. Я редко использую плавающую точку в своем коде, но когда я это делаю, меня всегда ловят предупреждения на безобидных строках, таких как

float PiForSquares = 4.0;

Проблема в том, что литерал 4.0 - это двойное число, а не число с плавающей точкой - что раздражает.

Для целочисленных типов у нас есть короткие int, int и long int, что довольно просто. Почему C не имеет коротких, длинных и длинных? И откуда же взялся "двойник"?

РЕДАКТИРОВАТЬ: Кажется, что отношения между плавающими типами похожи на отношения целых чисел. double должен быть по крайней мере таким же большим, как float, а long double по крайней мере таким же большим, как double. Других гарантий точности / дальности не дано.

Ответы [ 12 ]

0 голосов
/ 30 декабря 2008

Хорошо, исторически, вот как это было раньше:

В исходных машинах, использованных для C, 16-битные слова были разбиты на 2 байта, а символ - один байт. Адреса были 16 бит, поэтому sizeof(foo*) было 2, sizeof(char) было 1. Int было 16 бит, поэтому sizeof(int) также было 2. Затем появились машины VAX (расширенная адресация), и адрес был 32 бит. Символ был все еще 1 байтом, но sizeof(foo*) был теперь 4.

Была некоторая путаница, возникшая в компиляторах Беркли, так что короткое замыкание теперь составляло 2 байта, а целое число составляло 4 байта, поскольку они хорошо подходили для эффективного кода. Длинный стал 8 байтов, потому что был эффективный метод адресации для 8-байтовых блоков - которые назывались двойными словами . 4-байтовые блоки были словами и, конечно же, 2-байтовые блоки были полусловами .

Реализация чисел с плавающей точкой такова, что они вписываются в отдельные слова или двойные слова. Чтобы оставаться непротиворечивым, число с плавающей запятой двойного слова тогда называлось "double".

0 голосов
/ 30 декабря 2008

double - это сокращение от «двойной точности». Я полагаю, что long double возникает из-за нежелания добавлять другое ключевое слово, когда на процессорах начинает появляться тип с плавающей точкой с еще более высокой точностью.

...