- •С использованием смещения
- •При изменении разрядности числа () требуется пересчет числа
- •С использованием двоично-дополнительного кода
- •С отрицательным показателем
- •Симметричная
- •Кодирование двоичных потоков
- •Внутреннее представление вещественных чисел
- •С фиксированной точкой
- •С плавающей точкой
- •Денормализованные вещественные числа
- •Преобразование десятичного числа в двоичное представление
- •Перевод числа в двоичную систему
- •Нормализация – разложение на мантиссу и экспоненту основания (2) системы счисления
- •Вычисление конечной экспоненты числа (т.Е. Характеристики)
- •Корректировка мантиссы числа
- •Запись результата
- •Округление вещественных чисел
- •Ссылки по теме
-
Запись результата
Результат записывается в порядке: <знак><характеристика><мантисса>
Округление вещественных чисел
Округление возникает тогда, когда результат требует большей точности, чем позволяет представление чисел. Метод округления определяет, какое число выбирается в качестве результата.
При работе с вещественными числами округление числа используется после каждой операции в любом вещественном представлении. Число округляется к ближайшему возможному представлению. Если же число находится точно посередине между двумя ближайшими представлениями, то оно округляется к тому из них, которое четное.
Ведь если в спорных ситуациях округлять всегда вверх (или вниз), то возникнет постепенный рост числа (или его уменьшение), а при округлении к четному, округление вверх или вниз выполняются примерно равное число раз.
Пример (с комментарием от Скакова П.С.):
~5.101 = 101.00011010
5.1 = 101.00011001100110011...
~5.098 = 101.00011001
Под чётностью понимается место округления, а не какая-то абстрактная целая часть числа. То есть в данном примере граничные числа 519 (10100011001) и 520 (10100011010).
Кроме того, правило "к чётному" применяется, только когда мы находимся точно посередине, когда невозможно найти ближайшее, что очевидно не так в приведённом примере: здесь мы находимся ближе к большему числу и округлять надо вверх.
Сумма всех разрядов младших данного стремится к данному значению: 10…~= 0111111… поэтому нужно смотреть на разряды, которые не вошли в мантиссу:
-
Если первый не вошедший разряд – 1 и из остальных разрядов хотя бы один больше нуля, то очевидно, округлять надо в большую сторону
-
Если первый не вошедший разряд – 1 и остальные разряды равны нулю, то очевидно, что это ровно половина и округлять его надо к четному
-
Если первый не вошедший разряд – 0, то значение остальных разрядов неважно, они будут меньше половины и должны быть отброшены.
Именно из-за округления результата после каждой операции .
Ссылки по теме
http://habrahabr.ru/blogs/cpp/112953/ – про операции над числами с плавающей точкой.
Страница