Подтвердить что ты не робот

Float и Int Оба 4 байта? Как так?

Int - это 4 байта с диапазоном + - 2 ^ 31 Float - 4 байта с диапазоном + - 1.2E (+ - 38)

Float включает в себя столько точек на Real Line и все равно равно int. Является ли представление Sign-Exponent-Fraction для float настолько удивительным (или 2 дополнения Int настолько жалким), что такое различие в размерах возникает? Я что-то пропустил?

Я просто очень удивляюсь, что что-то, что представляет (фактически) всю реальную строку, имеет тот же размер, что и целые числа.

4b9b3361

Ответ 1

Ну, вот краткое объяснение:

int и float обычно занимают "одно слово" в памяти. Сегодня с переходом на 64-битные системы это может означать, что ваше слово составляет 64 бита или 8 байтов, что позволяет отображать огромный диапазон чисел. Или, по-прежнему, это может быть 32-битная система, означающая, что каждое слово в памяти занимает 4 байта. Обычно доступ к памяти может выполняться на основе слов в слово.

Разница между int и float не является их физическим пространством в памяти, а тем, как ведет себя ALU (Арифметическая логическая единица) с номером. Int представляет его прямое соответствующее число в двоичном (ну, почти - он использует две нотации дополнения). A float, с другой стороны, кодируется (как правило, в стандартном формате IEEE 754) для представления числа в экспоненциальной форме (т.е. 2,99 * 10 ^ 6 в экспоненциальной форме).

Ваше недоразумение Я считаю ложным в заблуждении, что плавающая точка может представлять больше информации. Хотя float может представлять числа большей величины, он не может представлять их с такой же точностью, поскольку он должен учитывать кодировку экспоненты. Сам экспонент мог быть довольно большим. Таким образом, количество значимых цифр, которые вы выходите из числа с плавающей запятой, меньше (что означает, что меньше информации представлено), а в то время как int представляет диапазон целых чисел, величина чисел, которые они представляют, намного меньше.

Ответ 2

Я просто очень удивляюсь, что что-то, что представляет (фактически) всю реальную строку, имеет тот же размер, что и целые числа.

Возможно, это станет менее неожиданным, если вы поймете, что существует множество целых чисел, которые 32-разрядный int может представлять точно, а 32-разрядный float не может.

A float может представлять меньше отличных чисел, чем int, но они распространяются в более широком диапазоне.

Также стоит отметить, что расстояние между последовательными floats становится шире, когда он удаляется от нуля, тогда как он остается постоянным для последовательных ints.

Ответ 3

Я считаю, что важным моментом здесь является то, что int является точным, в то время как float может быть закруглен. Часть данных в поплавке описывает местоположение десятичного числа, а другая часть определяет значение. Поэтому, пока вы можете показать 1.2E38, только первые несколько цифр могут быть правильными, а остальные могут быть заполнены 0.

От: http://en.wikipedia.org/wiki/Floating_point

"с семью десятичными цифрами может дополнительно представлять собой 1.234567, 123456.7, 0.00001234567, 1234567000000000 и т.д.

Это зависит от того, как конкретная система реализует поплавки.

Ответ 5

Оба типа представляют одинаковое количество точек на реальной строке - они просто разнесены по-разному. Разница между наивысшим и вторым по величине поплавка составляет ок. 256

Ответ 6

Стандарт для плавающей запятой согласно стандартам требует base = 2 вместо base = 10 и 24 цифры (точность). Поскольку он не является основанием 10, формат базы 2 способен представлять только определенный набор действительных чисел (что является неотъемлемой причиной ошибки при представлении реальных чисел). Это также означает, что, как и раньше, этот float не представляет много других чисел по сравнению с int.