Арифметика с плавающей точкой - биты показателя степени - PullRequest
0 голосов
/ 03 марта 2019

У меня есть общий вопрос об арифметике с плавающей точкой.

В последнее время я очень заинтересовался пониманием вычислений в программах, поэтому я начал решать упражнения.Я хотел бы, чтобы вы объяснили тот, который меня особенно смущает:

Вычислить машинный эпсилон (не только как десятичное значение, но также как число битов двоичного показателя ).Зависит ли машинный эпсилон от количества битов мантиссы или количества бит экспоненты?

Вот мое исчисление:

def exponent():
    expon = 0
    for number in range(1000):
         if 1.0+2.0**(-number)>1.0:
             expon = number
    return expon

print(exponent())
print(2**(exponent())) # Prints decimal value 

Вывод:

52
2.220446049250313e-16

Это правильно?У меня проблема с интерпретацией выделенного текста.Должен ли я определить, 8 или 11 бит?Как я могу это сделать?Верно ли предположение, что эпсилон зависит от количества битов мантиссы, поскольку они определяют точность поплавка?

1 Ответ

0 голосов
/ 04 марта 2019

Текст, который вы написали, плохо написан.Непонятно, что будет означать вычисление числа «как числа битов двоичного показателя степени».Например, если число бит двоичного показателя равно 11, что будет означать вычисление числа как 11?Если кто-то скажет «Рассчитать 7 раз 13 как 11», это было бы бессмысленно.

Так называемый машинный эпсилон, разница между 1 и следующим большим представимым числом, зависит исключительно от количества цифр (битов).для базы 2) доступно для значений. 1

2 -52 - машинный эпсилон для базовой 64-битной двоичной плавающей запятой IEEE-754.Поскольку он имеет 53-битное значение (52 бита, закодированные явно, один кодируется через поле экспоненты), когда старший бит представляет 2 0 , как это должно быть для чисел от 1 до 2, младший битЗначение и представляет 2 -52 .

Сноска

1 «Значение» - предпочтительный термин для дробной части числа с плавающей запятой,Мантисса - это дробная часть логарифма.

...