Сколько бит из 64 назначено целочисленной части и дробной части в двойном. Или есть какое-либо правило, чтобы указать его?Число бит, назначенных для двойного типа данных
ответ
двойной на 64-битной машине, имеет один знаковый бит, 11 экспоненциальных битов и 52 дробных бита.
думаю (1 знаковый бит) * (52 дробных бит)^(11 бит экспоненты)
Не все системы используют IEEE-754 –
О, мои извинения, это была рамка, с которой я знаком. –
Я прошел через это [link] (http://stackoverflow.com/questions/1848700/biggest-integer-that-can-be-stored-in-a-double) Я все еще не могу понять, почему максимальное значение double равно 1.7E308, но с 53 бит для целочисленной части оно составляет всего 2^53. Как связаны эти 2 числа? –
Примечание: Я знаю, что я уже ответил с комментарием. Это для моей же пользы, как и ОП; Я всегда узнаю что-то новое, когда я пытаюсь это объяснить.
с плавающей точкой значения (независимо от точности) представлены следующим образом:
sign * significand * βexp
где sign
равен 1 или -1, β
является базой , exp
представляет собой целое число показатель , и significand
- это доля. В этом случае β
- 2
. Например, реальное значение 3.0
может быть представлено как 1.102 * 21
, или 0.112 * 22
, или даже 0.0112 * 23
.
Помните, что двоичное число представляет собой сумму степеней 2, при этом мощности уменьшаются слева. Например, 1012
эквивалентен 1 * 22 + 0 * 21 + 1 * 20
, что дает нам значение 5
. Вы можете расширить это мимо точки натальной с использованием отрицательных степеней 2, так 101.112
эквивалентно
1 * 22 + 0 * 21 + 1 * 20 + 1 * 2-1 + 1 * 2-2
, который дает нам десятичное значение 5.75
. Число с плавающей точкой нормализуется таким образом, что есть один ненулевой цифры до точки натальной, так что вместо написания 5.75
, как 101.112
, мы бы написать это как 1.01112 * 22
Как это закодированной в 32 битный или 64-битный двоичный формат? Точный формат зависит от платформы; большинство современных платформ используют спецификацию IEEE-754 (которая также определяет алгоритмы для арифметики с плавающей запятой, а также специальные значения как бесконечность, а не число (NaN)), однако некоторые старые платформы могут использовать собственный собственный формат (например, VAX G и H с плавающей запятой). Я думаю, что x86 также имеет собственный 80-битный формат для промежуточных вычислений.
Общая схема выглядит примерно так:
seeeeeeee...ffffffff....
где s
представляет знаковый бит, e
представляет биты, посвященные экспонент, и f
представляет биты, посвященные мантиссы или фракцию. -754 стандарта IEEE 32-битовое с одинарной точностью макет
seeeeeeeefffffffffffffffffffffff
Это дает нам 8-битный показатель степени (который может представлять значения -126
через 127
) и 22-битный мантиссу (дающие нам примерно от 6 до 7 значимые десятичные цифры). A 0
в знаке бит представляет собой положительное значение, 1
представляет отрицательный.Показатель кодируется таким образом, что представляет собой 000000012
-126
, 011111112
представляет 0
и 111111102
представляет 127
(000000002
зарезервирован для представления 0
и «денормализованный» номер, в то время как 111111112
зарезервирован для представления бесконечности и NaN). Этот формат также предполагает скрытый бит ведущей фракции, который всегда установлен на 1
. Таким образом, наша ценность 5.75
, которую мы представляем, как 1.01112 * 22
, будут закодированы в 32-битной одинарной точности поплавка, как
01000000101110000000000000000000
|| || |
|| |+----------+----------+
|| | |
|+--+---+ +------------ significand (1.0111, hidden leading bit)
| |
| +---------------------------- exponent (2)
+-------------------------------- sign (0, positive)
Стандарт IEEE-754 двойной точности с плавающей точкой использует 11 битов для экспоненты (-1022
через 1023
) и 52 бит для значения. Я не собираюсь писать это (этот пост превращается в роман, как есть).
Номера с плавающей запятой имеют диапазон , чем целые числа по показателю; экспоненту 127
требуется всего 8 бит для кодирования, но 2127
представляет собой 38-значное десятичное число. Чем больше бит в экспоненте, тем больше диапазон значений, которые могут быть представлены. Точность (количество значащих цифр) определяется количеством бит в значении. Чем больше бит в значении, тем более значимые цифры вы можете представить.
Большинство реальных значений не может быть представлено точно в качестве числа с плавающей запятой; вы не можете сжимать бесконечное число значений в конечное число бит. Таким образом, существуют промежутки между представляемыми значениями с плавающей запятой, и большинство значений будет приближений. Чтобы проиллюстрировать эту проблему, давайте посмотрим на формат 8-битном «четверть точности»:
seeeefff
Это дает нам показатель между -7
и 8
(мы не будем беспокоиться о специальных значениях, как бесконечность и NaN) и 3-битное значение со скрытым ведущим битом. Чем больше наш экспонент, тем шире разрыв между представляемыми значениями. Вот таблица, показывающая проблему. Левый столбец является значимым; каждый дополнительный столбец показывает значения, которые мы можем представлять для данного показателя:
sig -1 0 1 2 3 4 5
--- ---- ----- ----- ----- ----- ----- ----
000 0.5 1 2 4 8 16 32
001 0.5625 1.125 2.25 4.5 9 18 36
010 0.625 1.25 2.5 5 10 20 40
011 0.6875 1.375 2.75 5.5 11 22 44
100 0.75 1.5 3 6 12 24 48
101 0.8125 1.625 3.25 6.5 13 26 52
110 0.875 1.75 3.5 7 14 28 56
111 0.9375 1.875 3.75 7.5 15 30 60
Обратите внимание, что, как мы движемся в сторону больших значений, разрыв между представимых значений становится больше. Мы можем представить 8 значений между 0.5
и 1.0
, с промежутком 0.0625
между каждым. Мы можем представить 8 значений между 1.0
и 2.0
, с промежутком 0.125
между каждым. Мы можем представить 8 значений между 2.0
и 4.0
, с промежутком 0.25
между каждым. И так далее. Обратите внимание, что мы можем представить все положительные целые числа до 16
, но мы не можем представить значение 17
в этом формате; у нас просто не хватает бит в значении, чтобы это сделать. Если мы добавим значения 8
и 9
в этом формате, мы получим 16
, что является ошибкой округления. Если этот результат используется в любом другом вычислении, эта ошибка округления будет усугубляться.
Обратите внимание, что некоторые значения не могут быть представлены точно независимо от того, сколько бит у вас есть в значении. Точно так же, как 1/3
дает нам бесконечную десятичную дробную часть 0.333333...
, 1/10
дает нам не заканчивающуюся двоичную долю 1.10011001100...
.Нам понадобится бесконечное количество бит в значении, чтобы представить это значение.
- 1. Число бит в типе данных
- 2. Целое число для двойного преобразования
- 3. MySQL число людей, назначенных задаче
- 4. Получение NaN для двойного типа данных
- 5. Поплавок против двойного типа данных в улье
- 6. Калькулятор данных двойного типа C#
- 7. Квантование ввода двойного типа для вывода двойного типа в MATLAB
- 8. цифры двойного типа в C++
- 9. Получить младшие бит двойного в C#
- 10. Бит-маска в зависимости от типа данных
- 11. Почему для типа данных типа boolean требуется 8 бит?
- 12. Печать Двойного типа данных в C
- 13. Число бит в базовом типе данных
- 14. Длинная проблема двойного типа данных в C
- 15. Сохранение двойного типа данных создает ошибку
- 16. Атомный приращение двойного типа данных в cassandra
- 17. Расширить точность двойного типа данных MySQL?
- 18. Неожиданное поведение данных двойного примитивного типа
- 19. Преобразование сложного двойного двойного типа в Matlab
- 20. функция для отображения двойного в длинное число
- 21. opencl приводит неверные результаты для двойного типа данных?
- 22. Как скомпилировать Kiss_fft для использования двойного типа данных C++?
- 23. Сравнение значений двойного типа
- 24. Отображение фиксированной точки двойного типа
- 25. Получение данных, назначенных отдельным пользователям
- 26. пользовательский тип даты для преобразования двойного типа
- 27. Регулярное выражение для любого типа двойного числа
- 28. Указание количества бит для типа данных в C
- 29. Обходной путь Doctrine2 для отображения типа данных «бит» в MySql
- 30. Упакуйте число в нечетное число бит.
[Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/02Numerics/Double/paper.pdf). См. Также [этот ответ] (http://programmers.stackexchange.com/questions/215065/can-anyone-explain-representation-of-float-in-memory/215126#215126). –
Плавающая точка не имеет целочисленной и дробной части как таковой. Это похоже на научную нотацию. Обычные числа в общем двоичном формате имеют 11-битный двоичный показатель, изменяя значение вида 1.x, где x равно 52 бит. –