В чем разница между операцией с плавающей запятой одинарной точности и операцией с плавающей запятой двойной точности?
Меня особенно интересуют практические термины в отношении игровых приставок. Например, есть ли в Nintendo 64 64-битный процессор и означает ли это, что он способен выполнять операции с плавающей запятой двойной точности? Могут ли PS3 и Xbox 360 выполнять операции с плавающей запятой двойной точности или только одинарную точность, и в общем случае используются возможности двойной точности (если они существуют?).
floating-point
precision
processor
operations
tweetypi
источник
источник
Ответы:
Примечание: Nintendo 64 имеет 64-битный процессор, однако:
Из Вебопедии :
Формат двойной точности IEEE на самом деле имеет более чем в два раза больше бит точности, чем формат одинарной точности, а также гораздо больший диапазон.
Из стандарта IEEE для арифметики с плавающей точкой
Единственная Точность
Стандартное представление IEEE с плавающей запятой одинарной точности требует 32-битного слова, которое может быть представлено как пронумерованное от 0 до 31 слева направо.
последние 23 бита являются дробью 'F':
Значение V, представленное словом, может быть определено следующим образом:
0<E<255
тогда,V=(-1)**S * 2 ** (E-127) * (1.F)
где «1.F» предназначен для представления двоичного числа, созданного префиксом F с неявным начальным 1 и двоичной точкой.V=(-1)**S * 2 ** (-126) * (0.F)
. Это «ненормализованные» значения.В частности,
Двойная точность
Стандартное представление IEEE двойной точности с плавающей запятой требует 64-битного слова, которое может быть представлено как пронумерованное от 0 до 63 слева направо.
последние 52 бита являются дробью 'F':
Значение V, представленное словом, может быть определено следующим образом:
0<E<2047
тогда,V=(-1)**S * 2 ** (E-1023) * (1.F)
где «1.F» предназначен для представления двоичного числа, созданного префиксом F с неявным начальным 1 и двоичной точкой.V=(-1)**S * 2 ** (-1022) * (0.F)
это «ненормализованные» значения.Ссылка:
Стандарт ANSI / IEEE 754-1985,
Стандарт для двоичной арифметики с плавающей точкой.
источник
**
' является ВозведениеЯ прочитал много ответов, но, похоже, ни один из них не может правильно объяснить, откуда происходит слово « двойник» . Я помню очень хорошее объяснение, данное профессором университета, которое я имел несколько лет назад.
Вспоминая стиль ответа VonC, в представлении с плавающей запятой одинарной точности используется слово 32 бита.
Представление:
(Просто чтобы указать, знак бит является последним, а не первым.)
Представление с плавающей запятой двойной точности использует слово 64 бит.
Представление:
Как вы можете заметить, я написал, что у мантиссы в обоих типах информации на один бит больше, чем в ее представлении. На самом деле, мантисса - это число, представленное без всякого значения.
0
. Например,Это значит, что мантисса всегда будет в форме
0.α 1 α 2 ... α t × β p
где β - основа представления. Но поскольку дробь является двоичным числом, α 1 всегда будет равно 1, поэтому дробь можно переписать как 1.α 2 α 3 ... α t + 1 × 2 p, и начальная 1 может быть неявно принята, освободить место для дополнительного бита (α t + 1 ).
Очевидно, что число 32 равно 64, но это не то, откуда пришло слово.
точность указывает количество десятичных цифр, которые правильно , то есть без каких - либо ошибок представления или приближения. Другими словами, это указывает, сколько десятичных цифр можно безопасно использовать.
С учетом сказанного легко подсчитать количество десятичных цифр, которые можно безопасно использовать:
источник
Хорошо, основное различие в машине состоит в том, что двойная точность использует вдвое больше бит, чем один. В обычной реализации это 32 бита для одного, 64 бита для двойного.
Но что это значит ? Если мы примем стандарт IEEE, то число с одинарной точностью имеет около 23 битов мантиссы и максимальный показатель степени около 38; двойная точность имеет 52 бита для мантиссы и максимальный показатель около 308.
Подробности в Википедии , как обычно.
источник
Чтобы добавить ко всем замечательным ответам здесь
Прежде всего float и double оба используются для представления чисел дробных чисел. Итак, разница между этими двумя факторами связана с тем, насколько точно они могут хранить числа.
Итак, в основном мы хотим знать, насколько точно может быть сохранено число и что мы называем точностью.
Цитируя @Alessandro здесь
Float может точно хранить около 7-8 цифр в дробной части, в то время как Double может точно хранить около 15-16 цифр в дробной части
Таким образом, float может хранить вдвое больше дробной части. Вот почему Double называется двойной поплавок
источник
Что касается вопроса: «Могут ли ps3 и xbxo 360 выполнять операции с плавающей запятой двойной точности или только одинарную точность, и в общем случае используются возможности двойной точности (если они существуют?)».
Я считаю, что обе платформы неспособны к двойной плавающей запятой. Оригинальный процессор Cell имел только 32-разрядные числа с плавающей запятой, то же самое с аппаратным обеспечением ATI, на котором основан XBox 360 (R600). Позже Cell получил двойную поддержку с плавающей запятой, но я уверен, что PS3 не использует этот чип.
источник
В основном арифметика с плавающей запятой одинарной точности имеет дело с 32-битными числами с плавающей запятой, тогда как двойная точность сделок с 64 бит.
Количество бит с двойной точностью увеличивает максимальное значение, которое может быть сохранено, а также увеличивает точность (то есть количество значащих цифр).
источник
Все объяснили в мельчайших подробностях и больше ничего не могу добавить. Хотя я хотел бы объяснить это в Условиях Layman или просто АНГЛИЙСКИЙ
.....
Переменная, способная хранить или представлять «1,9», обеспечивает меньшую точность, чем переменная, которая может хранить или представлять 1,9999. Эти фракции могут составить огромную разницу в больших вычислениях.
источник
Двойная точность означает, что для хранения чисел требуется вдвое больше слова. На 32-битном процессоре все слова 32-битные, поэтому двойные 64-битные. С точки зрения производительности это означает, что для выполнения операций с числами двойной точности требуется немного больше времени. Таким образом, вы получаете лучший диапазон, но это незначительно сказывается на производительности. Этот хит немного смягчается аппаратными модулями с плавающей запятой, но он все еще там.
В N64 использовался MECS R4300i на базе NEC VR4300, который представляет собой 64-битный процессор, но процессор взаимодействует с остальной частью системы по 32-разрядной шине. Таким образом, большинство разработчиков использовали 32-битные числа, потому что они быстрее, и большинство игр в то время не нуждались в дополнительной точности (поэтому они использовали числа с плавающей точкой, а не двойные).
Все три системы могут выполнять операции с плавающей запятой одинарной и двойной точности, но не из-за производительности. (хотя почти все после n64 использовало 32-битную шину, так что ...)
источник
Прежде всего float и double оба используются для представления чисел дробных чисел. Итак, разница между этими двумя факторами связана с тем, насколько точно они могут хранить числа.
Например: я должен хранить 123,456789 Один может хранить только 123,4567, в то время как другой может хранить точные 123,456789.
Итак, в основном мы хотим знать, насколько точно может быть сохранено число и что мы называем точностью.
Цитируя @Alessandro здесь
Точность указывает количество правильных десятичных цифр, то есть без каких-либо ошибок представления или аппроксимации. Другими словами, это указывает, сколько десятичных цифр можно безопасно использовать.
Float может точно хранить около 7-8 цифр в дробной части, в то время как Double может точно хранить около 15-16 цифр в дробной части
Таким образом, double может хранить вдвое больше дробной части, чем float. Именно поэтому Double называется double the float
источник
В соответствии с IEEE754 • Стандарт для хранения с плавающей запятой • 32- и 64-битные стандарты (одинарная и двойная точность) • Экспоненты 8 и 11 бит соответственно • Расширенные форматы (как мантисса, так и экспонента) для промежуточных результатов
источник
Число с одинарной точностью использует 32 бита, MSB - знаковый бит, а число с двойной точностью - 64 бита, MSB - знаковый бит
Одинарная точность
SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)
Двойная точность:
SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)
источник