Все в заголовке: гарантирует ли IEEE-754 float
, double
и quad
точное представление -2
, -1
, -0
, 0
, 1
, 2
?
Гарантирует ли IEEE-754 float, double и quad точное представление -2, -1, -0, 0, 1, 2?
- Вы имеете в виду именно эти шесть значений или целые числа вообще? 17.11.2013
- Прочитайте о формате и попробуйте создать эти значения на бумаге. 17.11.2013
- Кстати, вы можете повеселиться здесь (хотя и не для "quad") 17.11.2013
Ответы:
Он гарантирует точное представление всех целых чисел до тех пор, пока количество значащих двоичных цифр не превысит диапазон мантиссы.
Числа с плавающей запятой IEEE 754 можно использовать для хранения целых чисел определенного диапазона. Например:
binary32
, реализованный в C/C++ какfloat
, обеспечивает 24-битную точность и, следовательно, может представлять с полной точностью 16-битные целые числа, например.short int
;binary64
, реализованный в C/C++ какdouble
, обеспечивает 53-битную точность и может представлять ровно 32-битные целые числа, например.int
;- нестандартная 80-битная точность Intel, реализованная как
long double
некоторыми компиляторами x86/x64, обеспечивает 64 значащих бита и может представлять 64-битные целые числа, например.long int
(в системах LP64, например, Unix) илиlong long int
(в системах LLP64, например, Windows); binary128
, реализованный как специфичные для компилятора типы, такие как__float128
(GCC) или_Quad
(Intel C/C++), обеспечивает 113 битов в мантиссе и, следовательно, может представлять ровно 64-битные целые числа.
Тот факт, что double
соответствует расширенному диапазону целых чисел, даже превышающему диапазон 32-битных целых чисел, используется в JavaScript, который не имеет специального целочисленного числового типа и вместо этого использует числа с плавающей запятой двойной точности для представления целых чисел.
Одна из особенностей чисел с плавающей запятой заключается в том, что они имеют отдельный бит знака, и поэтому существуют такие вещи, как положительные и отрицательные нули, что невозможно в представлении целого числа со знаком с дополнением до двух.
Простой способ получить ответ для любого десятичного числа, преобразовать абсолютное значение в двоичное (24 бита для числа с плавающей запятой, 53 бита для двойного числа, 113 бит для квадроцикла), затем обратно в десятичное число и посмотреть, получится ли то же значение обратно.
Для целых чисел ответ очевиден, вы ничего не теряете, если только значение не слишком велико, чтобы уместиться в заданное количество бит.
Преобразование рациональных значений с нецелой частью более интересно. Там вы можете потерять точность при преобразовании в двоичный файл с некоторой фиксированной шириной, а при обратном преобразовании в десятичное число вы можете получить десятичное значение с периодическим десятичным расширением (или снова потерять точность, если вы его округлите).
Поскольку вы балуетесь плавающими числами IEEE, сначала прочитайте страницу википедии, а затем, когда вы почувствуете, что Если вы готовы к большему, перейдите по первой внешней ссылке, "Что должен знать каждый специалист по информатике". Об арифметике с плавающей запятой".
24
, 53
и 113
пожалуйста! 17.11.2013