float — число с плавающей точкой одинарной точностиВ машине оно занимает 4 байта и описывается с помощью 32-битного двоичного представления.
число с плавающей запятой двойной точностиВ машине оно занимает 8 байт и описывается 64-битным двоичным кодом.

Числа с плавающей запятой представляются внутри машины в экспоненциальной форме и раскладываются на:знак, мантисса, знак порядка, порядокЧетыре части.
Знаковый бит занимает 1 двоичный разряд и указывает, является ли число положительным или отрицательным.
Знак порядка занимает 1 двоичный бит и указывает, является ли порядок положительным или отрицательным.
Мантисса представляет значащие цифры числа с плавающей запятой, 0.xxxxxxx, но не хранит ведущий 0 и десятичную точку.
Порядок хранит свои значащие цифры.
Количество бит для порядка и количество бит для мантиссы определяются компьютерной системой.
Возможно, знак числа вместе с мантиссой занимает 24 бита, а знак порядка вместе с порядком занимает 8 бит --float。
Знак вместе с мантиссой занимает 48 бит, а знак порядка вместе с порядком занимает 16 бит —double。
Как только вы узнаете, сколько бит отведено под эти четыре части, оцените диапазон размеров в двоичном виде, затем преобразуйте в десятичный — это даст диапазон значений, который вы хотите узнать.
Для программистов разница между double и float состоит в том, что double имеет более высокую точность — 16 значащих цифр, тогда как float имеет 7 цифр точности. Но double потребляет в два раза больше памяти, чем float, а скорость вычислений double намного ниже, чем у float. В языке C имена математических функций для double и float различаются, поэтому не пишите их неправильно. Когда достаточно одинарной точности, не используйте двойную точность (чтобы сэкономить память и ускорить вычисления).
| Type | количество бит | значащие цифры | Числовой диапазон |
|---|---|---|---|
| float | 32 | 6-7 | -3.4*10(-38)~3.4*10(38) |
| double | 64 | 15-16 | -1.7*10(-308)~1.7*10(308) |
| long double | 128 | 18-19 | -1.2*10(-4932)~1.2*10(4932) |
Проще говоря, Float — это одинарная точность, занимает 4 байта в памяти, имеет 7 значащих цифр (из-за положительного и отрицательного знаков — не 8 цифр); на моём компьютере и на платформе VC++6.0 по умолчанию отображается 6 значащих цифр; double — двойная точность, занимает 8 байт, имеет 16 значащих цифр, но на моём компьютере и на платформе VC++6.0 по умолчанию также отображается 6 значащих цифр.
Пример: В C и C++ следующая инструкция присваивания:
float a=0.1;
Ошибка компилятора:warning C4305: 'initializing' : truncation from 'const double ' to 'float '
Причина:В C/C++ (не уверен, только ли так в VC++), для 0.1 справа от знака равенства в приведённом выше операторе мы считаем, что это float, но компилятор рассматривает его как double (поскольку десятичные литералы по умолчанию имеют тип double), поэтому он выдаёт это предупреждение. Обычно это исправляют на...0.1fТогда всё в порядке.
Я обычно часто использую double и не люблю использовать float.
В C и C# для данных с плавающей запятой используется тип одинарной точности.floatи тип двойной точностиdoubleдля хранения,floatДанные занимают 32 бита,doubleДанные занимают 64 бита, мы объявляем переменную.float f= 2.25fКогда дело доходит до выделения, как выделяется память? Если бы она выделялась случайно, разве мир не был бы в хаосе? На самом деле, и float, и double следуют стандартам IEEE при хранении: float следует IEEE R32.24, а double — R64.53.
Будь то одинарная или двойная точность, при хранении они делятся на три части:
- Знаковый бит: 0 обозначает положительное число, 1 обозначает отрицательное число.
- Биты экспоненты: используются для хранения данных экспоненты в научной нотации и используют смещённое представление.
- Часть мантиссы: Часть мантиссы.
Адрес источника: https://my.oschina.net/zd370982/blog/724265