добрый день,
пытаюсь разобраться с числами с плавающей запятой, но что-то я не сильно понял несколько нюансов. Например, почему если представить числя на числовом луче, то расстояние между ними будет не одинаковое? Как его вообще, расстояние на таком луче, считают? Если можно объясните на пальцах.
Интуитивно вроде понятно, а но формальности - тёмный лес. Специальной литературы прочёл уже порядочно на эту тему, но полного понимания нет.
[объясните]числа с плавающей запятой
Модератор: Модераторы разделов
[объясните]числа с плавающей запятой
root@brain # mv -rf /* /dev/null
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: [объясните]числа с плавающей запятой
Числа с плавающей точкой представляются в виде комбинации: мантисса + порядок. Мантисса всегда обозначает число в диапазоне [0, 1) и имеет ограниченную фиксированную точность (разрядность). Соответственно, при порядке 0 расстояние между числами составляет единицу младшего разряда мантиссы. Для чисел [1, 2) (двоичное ведь представление) порядок уже не 0, а 1, поэтому шаг чисел составляет единицу младшего разряда * 2^1. И т.д. расстояние между соседними числами составляет единицу младшего разряда мантиссы * 2^порядок.
Если для примера взять такое представление в 10-чной системе: мантисса 3 знака [0, 0.999]. Получим, что:
- числа [0, 1] представляются с порядком 0 (* 10^0) и идут с шагом 0.001,
- числа [1, 10] представляются с порядком 1 (* 10^1) и идут с шагом 0.01,
- числа [10, 100] представляются с порядком 2 (* 10^2) и идут с шагом 0.1,
- ...
Если для примера взять такое представление в 10-чной системе: мантисса 3 знака [0, 0.999]. Получим, что:
- числа [0, 1] представляются с порядком 0 (* 10^0) и идут с шагом 0.001,
- числа [1, 10] представляются с порядком 1 (* 10^1) и идут с шагом 0.01,
- числа [10, 100] представляются с порядком 2 (* 10^2) и идут с шагом 0.1,
- ...
Мои розовые очки
Re: [объясните]числа с плавающей запятой
Кстати, не совсем верно, если мы говорим о IEEE 754. Мантисса в диапазоне [1,2) для нормализованных (бóльшая часть) чисел и [0,1) для денормализованных.
Для нормализованных чисел старший бит (всегда равный 1) не хранится с целью экономии. (Хранится в 80-битном представлении, но им практически никто не пользуется).
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: [объясните]числа с плавающей запятой
Может быть. Давненько я в эти потроха не заглядывал :) Однако, сути это не меняет.
Мои розовые очки
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: [объясните]числа с плавающей запятой
вот как раз _практически_ оно всегда там и считается. FPU других форматов не признаёт и считает только в 80и битном, но конечно после вычислений обычно конвертирует во что-то другое.
Re: [объясните]числа с плавающей запятой
Согласен, в FPU - 80 бит, но для хранения и в расчётах в программах, почти всегда 32 или 64. А если не хватает, то обычно длинную арифметику делают.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: [объясните]числа с плавающей запятой
компилятор обычно сворачивает расчёты внутрь стека сопроцессора, потому расчёты исполняются таки на 80и битах. Хотя конечно хранятся результаты в 32х или 64х битах.
т.ч. формат с 80ю битами востребован.
всё просто: есть мантисса (число от 0 до 1 со знаком, причём она всегда меньше 1), и есть порядок. Ну как в десятичной записи: 1.234567788999023 * 10^17
только тут двоичная система счисления. В двоичной системе счисления первый бит мантиссы всегда равен нулю, а второй - единице (если она нормализованная), потому их и не хранят. Т.е.
0.100111000111 * 2^100101
тут не надо хранить первый ноль и вторую единицу. Если вторая цифра ноль, то можно мантиссу сдвинуть влево, вычесть 1 из порядка. Если всё равно 0, то повторить. Есть только два особых случая:
1. ноль
2. НЕХ (NaN)
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: [объясните]числа с плавающей запятой
а что там используется?
SSE началось с iPIII, но вот я вот не вижу никаких изменений именно для FP чисел. Что видите вы?
ну да... конечно...
у вас другие процессоры, и вы этот пост написали под XYZ.
не смешите меня. не смешно на вас.