В чем разница между одной точностью и двойной точностью с плавающей запятой?
в чем разница между операцией с плавающей запятой одиночной точности и операцией с плавающей запятой двойной точности?
меня особенно интересуют практические термины в отношении игровых консолей. Например, у Nintendo 64 есть 64-битный процессор, и если это так, значит ли это, что он способен выполнять операции с плавающей запятой двойной точности? Может ли PS3 и Xbox 360 снять операции с плавающей запятой двойной точности или только с одной точностью и в целом использование-это использование возможностей двойной точности (если они существуют?).
9 ответов
Примечание:Nintendo 64 имеет 64-разрядный процессор, однако:
многие игры воспользовались 32-разрядным режимом обработки чипа, поскольку большая точность данных, доступная с 64-разрядными типами данных, обычно не требуется 3D-играми, а также тем, что обработка 64-разрядных данных использует в два раза больше ОЗУ, кэша и пропускной способности, тем самым снижая общую производительность системы.
от Webopedia:
термин двойная точность является чем-то неправильным, потому что точность на самом деле не двойная.
Слово double происходит от того факта, что число с двойной точностью использует в два раза больше битов, чем обычное число с плавающей запятой.
Например, если для числа с одной точностью требуется 32 бита,его двойную точность будет составлять 64 бита.дополнительные биты увеличивают не только точность, но и также диапазон величин, которые могут быть представлены.
Точная величина увеличения точности и диапазона значений зависит от формата, используемого программой для представления значений с плавающей запятой.
Большинство компьютеров используют стандартный формат, известный как формат с плавающей запятой IEEE.
С стандарт IEEE для арифметики с плавающей запятой
Один
IEEE single точное стандартное представление с плавающей запятой требует 32-битного слова, которое может быть представлено как пронумерованное от 0 до 31 слева направо.
- Первый БИТ знак бит, S,
- следующие восемь бит-это показатель bits, 'E', и
-
остальные 23 бита фракция 'F':
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
может быть определено значение V, представленное словом следующим образом:
- если E=255 и F не равно нулю, то V=NaN ("не число")
- если E=255 и F равно нулю, а S равно 1, то V= - бесконечность
- если E=255 и F равно нулю, а S равно 0, то V=бесконечность
- если
0<E<255
затемV=(-1)**S * 2 ** (E-127) * (1.F)
где "1.Ф" предназначен для представления двоичного числа, созданного путем префикса F с помощью неявное ведущее 1 и двоичная точка. - если E=0 и F не равно нулю, то
V=(-1)**S * 2 ** (-126) * (0.F)
. Эти являются " ненормализованными" ценности. - если E=0 и F равно нулю, а S равно 1, то V=-0
- если E=0 и F равно нулю, а S равно 0, то V=0
в частности,
0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0
0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity
0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN
0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5
0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)
0 00000000 00000000000000000000001 = +1 * 2**(-126) *
0.00000000000000000000001 =
2**(-149) (Smallest positive value)
Двойной Точности
стандартное представление с плавающей запятой двойной точности IEEE требует 64-битного слова, которое может быть представлено как пронумерованное от 0 до 63, слева направо.
- Первый БИТ знак бит, S,
- следующие одиннадцать бит-это показатель bits, 'E', и
-
последние 52 бита являются фракция 'F':
S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 1 11 12 63
значение V, представленное словом, может быть определено следующим образом:
- если E=2047 и F не равно нулю, то V=NaN ("не число")
- если E=2047 и F равно нулю, а S равно 1, то V=-бесконечность
- если E=2047 и F равно нулю, а S равно 0, тогда V=бесконечность
- если
0<E<2047
затемV=(-1)**S * 2 ** (E-1023) * (1.F)
где "1.Ф" предназначен для представления двоичного числа, созданного путем префикса F с помощью неявное ведущее 1 и двоичная точка. - если E=0 и F не равно нулю, то
V=(-1)**S * 2 ** (-1022) * (0.F)
эти являются "ненормализованными" значениями. - если E=0 и F равно нулю, а S равно 1, то V=-0
- если E=0 и F равно нулю, а S равно 0, то V=0
ссылки:
Стандарт ANSI/IEEE 754-1985,
Стандарт Двоичная Арифметика С Плавающей Запятой.
Я прочитал много ответов, но ни один, кажется, правильно объяснить, где слово двойной происходит от. Я помню очень хорошее объяснение, данное мне профессором Университета несколько лет назад.
вспоминая стиль ответа VonC, a один прецизионное представление с плавающей запятой использует слово из 32 бит.
- 1 бит для знак, S
- 8 бит на показатель, 'E'
- 24 бита для фракция, также называемый мантисса или коэффициент (хотя представлены только 23). Назовем его " М " (для мантисса, Я предпочитаю это название, так как" фракция " может быть неправильно понята).
представление:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
bits: 31 30 23 22 0
(просто чтобы указать, бит знака является последним, а не первым.)
A двойной представление с плавающей запятой точности использует слова 64 бит.
- 1 бит для знак, S
- 11 бит для показатель, 'E'
- 53 бита для фракция / мантисса / коэффициент (хотя представлено только 52),'M'
представление:
S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits: 63 62 52 51 0
как вы можете заметить, я написал, что мантисса имеет, в обоих типах, один бит больше информации по сравнению с ее представительство. На самом деле, мантисса-это число, представленное без всех его несущественных 0
. Например,
- 0.000124 станет × 0.124 10-3
- 237.141 становится 0.237141 × 103
Это означает, что мантисса всегда будет в форме
0.α1α2...αt × βp
где β-основание представление. Но поскольку дробь является двоичным числом, α1 всегда будет равно 1, поэтому дробь может быть переписана как 1.α2α3...αt+1 × 2p и начальный 1 можно неявно предположить, освобождая место для дополнительного бита (αt+1).
Теперь, очевидно, верно, что двойник 32 равен 64, но это не то, откуда взялось слово.
на точность указывает количество десятичных цифр, которые правильно, т. е. без какой-либо ошибки представления или приближения. Другими словами, он указывает, сколько десятичных цифр можно безопасное использовать.
С учетом сказанного, легко оценить количество десятичных цифр, которые можно безопасно использовать:
- один: log10(224), что составляет около 7~8 десятичных цифры
- двойной точности: log10(253), что составляет около 15~16 десятичных цифр
хорошо, основное различие в машине заключается в том, что двойная точность использует в два раза больше битов, чем один. В обычной реализации это 32 бита для одного, 64 бита для двойного.
а что это mean? Если мы примем стандарт IEEE, то одно точное число имеет около 23 бит мантиссы и максимальный показатель около 38; двойная точность имеет 52 бита для мантиссы и максимальный показатель около 308.
подробности в Википедия, как обычно.
Что касается вопроса " может ли ps3 и xbxo 360 снять операции с плавающей запятой двойной точности или только с одной точностью и в использовании generel использовать возможности двойной точности (если они существуют?)."
Я считаю, что обе платформы неспособны к двойной плавающей точке. Оригинальный сотовый процессор имел только 32-битные поплавки, то же самое с оборудованием ATI, на котором основан XBox 360 (R600). Позже ячейка получила двойную поддержку с плавающей запятой, но я уверен ПС3 не использует, что chippery.
чтобы добавить ко всем замечательным ответам здесь
в первую очередь float и двойной оба используются для представления дробных чисел. Таким образом, разница между ними связана с тем, с какой точностью они могут хранить числа.
например: Я должен хранить 123.456789, один может хранить только 123.4567, а другой может хранить точное 123.456789.
Итак, в основном мы хотим знать, насколько точно можно сохранить число и то, что мы называем точностью.
цитата @Alessandro здесь
точность указывает количество десятичных цифр, которые правильно, т. е. без какой-либо ошибки представления или аппроксимации. В другими словами, он указывает, сколько десятичных цифр можно безопасное использовать.
поплавка может точно храните около 7-8 чисел в частичной части пока Double может точно хранить около 15-16 цифр в дробной части
Итак, float может хранить двойную сумму дробной части. вот почему Double называется двойной поплавок
в принципе один арифметика с плавающей запятой имеет дело с 32-битными числами с плавающей запятой, тогда как двойной точности имеет дело с 64 бит.
число битов в двойной точности увеличивает максимальное значение, которое может быть сохранено, а также увеличивает точность (т. е. количество значимых цифр).
двойная точность означает, что числа занимают вдвое больше длины слова для хранения. На 32-разрядном процессоре все слова имеют 32 бита, поэтому удвоение-64 бита. С точки зрения производительности это означает, что операции с числами двойной точности занимают немного больше времени. Таким образом, вы получаете лучший диапазон, но есть небольшой удар по производительности. Этот удар немного смягчается аппаратными блоками с плавающей запятой, но он все еще существует.
на N64 на данный момент используется в MIPS R4300i-основанный на NEC VR4300, который является 64-битным процессором,но процессор взаимодействует с остальной частью системы по 32-битной шине. Так, большинство разработчиков использовали 32-битные числа, потому что они быстрее, а большинству игр в то время не требовалась дополнительная точность (поэтому они использовали поплавки не двойники).
все три системы can выполняйте одиночные и двойные прецизионные плавающие операции, но они не могут быть из-за производительности. (хотя в значительной степени все после того, как n64 использовал бит 32 автобус такой...)
согласно IEEE754 * Стандарт для хранения с плавающей запятой * Стандарты 32 и 64 битов (одиночная точность и двойная точность) * 8 и 11-битный показатель соответственно * Расширенные форматы (как мантисса, так и Экспонента) для промежуточных результатов
одиночный номер точности использует 32 бита, с MSB быть битом знака, тогда как двойной номер точности использует 64bits, MSB быть битом знака Однократная точность-SEEEEEEEFFFFFFFFFFFFFFFFFFFFFF(ЗНАК + ПОКАЗАТЕЛЬ + ЗНАЧЕНИЕ) Двойной точности-SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(ЗНАК + ПОКАЗАТЕЛЬ + ЗНАК)