- •Что делать
- •Просто о “длинных” числах
- •Массивы в Си
- •Ввод длинного числа с клавиатуры
- •Как это будет на Си?
- •Сложение двух чисел
- •Умножение длинного числа на длинное
- •Несколько слов о реализации
- •Заключение
- •Задачи на длинную арифметику
- •Задачи для самостоятельного решения
- •Список использованной литературы
- •Проверочная работа
- •1 Вариант
- •2 Вариант
- •Представление вещественных чисел
- •Нормальная и нормализованная форма
- •Типы чисел с плавающей точкой (по ieee 754) Число половинной точности (Binary16, Half precision)
- •Число одинарной точности (Binary32, Single precision, float)
- •Число двойной точности (Binary64, Double precision, double)
- •Число четверной точности (Binary128, Quadruple precision)
- •Диапазон значений чисел с плавающей запятой
- •Особые значения чисел с плавающей точкой Ноль (со знаком)
- •Неопределенность (NaN)
- •Бесконечности
- •Денормализованные числа
- •Действия с числами с плавающей запятой Умножение и деление
- •Сложение и вычитание
- •Алгоритм получения представления вещественного числа в памяти эвм
- •Ссылки Использованные материалы
- •Что стоит прочесть
Действия с числами с плавающей запятой Умножение и деление
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.
Сложение и вычитание
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:
Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате -269 7/32 и 405,875.
Переведем -269 7/32 в машинный вид. Для этого сначала переведем его в двоичную систему счисления.
-269 7/32 = -269,21875
-269,2187510 = -100001101,001112
Нормализуем полученное двоичное число по правилам машинной арифметики.
-100001101,00111 = -1,0000110100111 × 101000
Найдем смещенный порядок. Так как в условии говориться о 32-разрадном представлении, то смещение порядка равно 12710.
E = 810 + 12710 = 10002 + 11111112 = 100001112
Число отрицательное, следовательно, в бите знака будет стоять единица.
Итак, первое число в машинном 32-разрадном представлении с плавающей точкой будет иметь вид:
11000011100001101001110000000000 (жирным шрифтом выделен порядок числа, длина мантиссы - 23 бита).
Переведем второе число в машинный вид, совершая те же действия.
405,87510 = 110010101,1112 = 1,10010101111 × 101000
Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.
Второе число положительное, следовательно, бит знака будет содержать ноль.
Итак в машинном 32-разрядном представлении второе число будет иметь вид:
01000011110010101111000000000000
Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В
компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.
1,10010101111002 - 1,00001101001112 = 0,10001000101012
Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок - уменьшить его на единицу.
Знак результата - положительный, следовательно, бит знака содержит ноль.
01000011000010001010100000000000
Проверим правильность наших вычислений. Переведем результат в десятичное представление.
Найдем реальный порядок результата, вычтя из него значение смещения 12710.
E = 100001102 - 11111112 = 13410 - 12710 = 710 = 1112
Следовательно, число результата будет иметь вид:
A = 1,000100010101 × 10111 = 10001000,101012 = 136,6562510
Результат наших вычислений верен, так как 405,875 - 269,21875 = 136,65625.
