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

В чем разница между типом данных float и integer при одинаковом размере?

Какая разница между типом данных float и integer при том же размере?

4b9b3361

Ответ 1

  • float хранит значения с плавающей запятой, то есть значения, имеющие потенциальные десятичные знаки
  • int хранит только целые значения, т.е. целые числа

Таким образом, хотя оба имеют ширину в 32 бита, их использование (и представление) совершенно иное. Вы не можете хранить 3.141 в целочисленном размере, но можете в float.

Рассеивание их еще немного:

В целых числах все биты используются для хранения значения числа. Это (на Java и многие компьютеры тоже) сделано в так называемом двух дополнит. Это в основном означает, что вы можете представить значения & minus; 2 31 до 2 31   1.

В поплавке эти 32 бита разделяются между тремя отдельными частями: знаковым битом, показателем и мантиссой. Они выложены следующим образом:

S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

Существует один бит, который определяет, является ли число отрицательным или неотрицательным (ноль не является ни положительным, ни отрицательным, но имеет битовый знак, равный нулю). Тогда есть восемь бит экспонента и 23 бит мантиссы. Чтобы получить полезный номер из этого, (примерно) выполняется следующий расчет:

M × 2 E

(Для этого есть больше, но этого должно хватить для целей этого обсуждения)

Мантисса по существу не намного больше, чем 24-разрядное целое число. Это умножается на 2 на степень экспоненциальной части, которая, грубо говоря, представляет собой число между & минус 128 и 127.

Поэтому вы можете точно представлять все числа, которые бы вписывались в 24-битное целое число, но числовой диапазон также намного больше, поскольку более крупные экспоненты допускают большие значения. Например, максимальное значение для float составляет около 3,4 × 10 38 тогда как int допускает значения до 2,1 × 10 9.

Но это также означает, что, поскольку 32 бита имеют только 4,2 × 10 9 различные состояния (которые все используются для представления значений int могут хранить), что на большем конце float числовые номера отличаются друг от друга разнесенными друг от друга (поскольку число уникальных float не может быть больше, чем уникальные числа int). Вы не можете точно представлять некоторые цифры. Например, число 2 × 10 12 имеет представление в float от 1 999 999 991 808. Это может быть близко к 2 000 000 000 000, но это не точно. Аналогично, добавление 1 к этому номеру не изменяет его, потому что 1 слишком мал, чтобы сделать разницу в больших масштабах float используется там.

Аналогично, вы можете также представлять очень маленькие числа (от 0 до 1) в float, но независимо от того, являются ли эти цифры очень большими или очень маленькими, float имеет точность около 6 или 7 десятичных цифр, Если у вас есть большие числа, эти цифры находятся в начале номера (например, 4.51534 × 10 35 то есть не более 451534 следует 30 нулями - и float не может сказать ничего полезного о том, 30 цифр - это нули или что-то еще), для очень маленьких чисел (например, 3.14159 × 10 & minus; 27) они находятся в дальнем конце номера, за пределами стартовых цифр 0,0000...

Ответ 2

Поплавки используются для хранения более широкого диапазона чисел, чем может быть помещено в целое число. К ним относятся десятичные числа и номера стилей научной нотации, которые могут быть более значительными, чем могут соответствовать 32 битам. Здесь глубокое погружение в них: http://en.wikipedia.org/wiki/Floating_point