0 умножить число с плавающей запятой - PullRequest
2 голосов
/ 18 октября 2011

как вы знаете, один номер будет сохранен в памяти в следующем формате: (-1)^s * 1.f * 2^e: и ноль сохранит так: 1.0000000000000000 * 2 ^ -126

сейчас Если я умножу его на другое число с плавающей запятой, например 3.37 (-1) ^ 0 * 1.10101111 * 2 ^ 128 это не будет 0 это реальность, но в компьютере это будет 0, как и почему?

Ответы [ 5 ]

3 голосов
/ 18 октября 2011

Как указано здесь (Википедия, извините ...) , существуют специальные значения для показателя степени, которые обрабатываются по-разному. Если показатель равен нулю, формула для вычисления значения числа равна

(-1)^s * 0.f * 2^(-126)   # notice 0.f instead of 1.f for other exponents

Итак, для нуля с плавающей точкой просто все биты установлены в ноль (т.е. f=0, s=0, e=0). Разумеется, алгоритмы умножения должны позаботиться об этом «особом» показателе и установить в этом случае результат равным нулю (точнее, + Zero или -Zero соответственно ...)

2 голосов
/ 18 октября 2011

Я скажу, что математический блок процессора имеет некоторую оптимизацию для «специальных» чисел с плавающей запятой, таких как NaN, Infinity и 0 (и обратите внимание, что технически в двоичном fp IEEE есть два0, положительный и отрицательный) и знать, что делать в трех случаях.

Если вам интересно, здесь http://steve.hollasch.net/cgindex/coding/ieeefloat.html есть одна таблица, которая показывает, что происходит, когда вы суммируете/ умножить «специальные» числа между собой.

2 голосов
/ 18 октября 2011

Ноль (обычно) является особым случаем в представлениях с плавающей запятой, а в IEEE с плавающей запятой ноль представляется как 0.0 * 2 ^ -126 (или независимо от того, является ли показатель степени & ndash; это действительно не имеет значения).

0 голосов
/ 18 октября 2011

почему: набор чисел с плавающей точкой не является непрерывным, как R, установленный в Math.Поэтому некоторые нуберы не могут быть правильно отображены и округлены до ближайшего возможного визуализируемого числа

как: оно округляется:)

0 голосов
/ 18 октября 2011

Ошибки округления. Компьютеры конечны

...