почему существует два размера плавающей двоичной точки
Поскольку многие языки программирования уже имели отдельные типы с плавающей точкой одинарной и двойной точности, включая C (++), Java и Visual Basic. Естественно, что в C ++ / CLI, J # и VB.NET тоже есть эти типы.
OTOH, не было причин обратной совместимости иметь несколько десятичных типов с плавающей запятой.
Если я правильно понимаю общий принцип, вы захотите использовать
float (32-разрядная версия) для повышения производительности по сравнению с двойной (64-разрядной) на 32-разрядной версии
процессор, если вам не нужен дополнительный размер двойного.
Нет. Несмотря на название, double
долгое время был «основным» типом с плавающей запятой, а float
- типом «половинной точности», используемым для оптимизации памяти. Например, класс .NET System.Math
почти всегда использует double
вместо float
. И что во всех языках, производных от C, литералы типа 1.23
имеют тип double
(вам нужен дополнительный f
, чтобы получить float).
Так почему бы не предложить 64-разрядное десятичное число или даже 32-разрядное?
При 32-битном (вероятно, 7-значном) decimal
вы будете постоянно сталкиваться с ошибками округления. Теперь могут возникнуть ситуации, когда вы намеренно хотите пожертвовать точностью ради эффективности, но в этом случае вы также можете использовать float
, чтобы получить преимущество аппаратной поддержки.