максимальное число с плавающей запятой, представленное в IEEE 754

Мне интересно, является ли максимальный поплавок, представленный в IEEE 754:

(1.11111111111111111111111)_b*2^[(11111111)_b-127]

Здесь _b означает двоичное представление. Но это значение 3.403201383*10^38, которое отличается от 3.402823669*10^38, которое равно (1.0)_b*2^[(11111111)_b-127] и задается, например, c++ <limits>. Разве (1.11111111111111111111111)_b*2^[(11111111)_b-127] не может быть представлено и больше в рамках?

Кто-нибудь знает, почему?

Спасибо.


person Qiang Li    schedule 19.04.2012    source источник


Ответы (2)


Показатель степени 11111111b зарезервирован для бесконечности и NaN, поэтому ваше число не может быть представлено.

Наибольшее значение, которое может быть представлено с одинарной точностью, примерно 3,4028235×1038, на самом деле равно 1,11111111111111111111111b×211111110b- 127.

См. также http://en.wikipedia.org/wiki/Single-precision_floating-point_format

person Joni    schedule 19.04.2012

Поскольку "m" — мантисса, а "e" — экспонента, ответ таков:

введите здесь описание изображения

В вашем случае, если количество битов в IEEE 754:

  • 16 бит у вас есть 1 для знака, 6 для экспоненты и 11 для мантисы. Наибольшее представленное число составляет 4 293 918 720 человек.
  • 32 бита у вас есть 1 для знака, 8 для экспоненты и 23 для мантисы. Наибольшее представленное число — 3.402823466E38.
  • 64 бита у вас есть 1 для знака, 11 для экспоненты и 52 для мантисы. Наибольшее представленное число 2 ^ 1024 - 2 ^ 971.
person Fernando Pérez Lara    schedule 16.06.2019