Лабораторная работа № Ознакомление с фундаментальными типами данных План: Целые типы данных


Download 379.22 Kb.
bet11/16
Sana28.02.2023
Hajmi379.22 Kb.
#1237675
TuriЛабораторная работа
1   ...   8   9   10   11   12   13   14   15   16
Bog'liq
Лаб 1

Размер

Диапазон

Точность

4 байта

от ±1.18 x 10-38 до ±3.4 x 1038

6-9 значащих цифр (в основном 7)

8 байт

от ±2.23 x 10-308 до ±1.80 x 10308

15-18 значащих цифр (в основном 16)

80 бит (12 байт)

от ±3.36 x 10-4932 до ±1.18 x 104932

18-21 значащих цифр

16 байт

от ±3.36 x 10-4932 до ±1.18 x 104932

33-36 значащих цифр

Может показаться немного странным, что 12-байтовая переменная типа с плавающей точкой имеет тот же диапазон, что и 16-байтовая переменная. Это потому, что они имеют одинаковое количество бит, выделенных для экспонента (только в 16-байтовой переменной точность будет выше).
Правило: Используйте по умолчанию тип double вместо типа float, так как его точность выше.


Ошибки округления
Рассмотрим дробь 1/10. В десятичной системе счисления эту дробь можно представить как 0.1, в двоичной системе счисления эта дробь представлена в виде бесконечной последовательности: 0.00011001100110011… Именно из-за подобных разногласий в представлении чисел в разных системах счисления — у нас могут возникать проблемы с точностью. Например:

Результат выполнения программы выше:
0.1
0.10000000000000001
Первый cout выводит 0.1 (что и ожидаемо). После того, как мы изменили точность cout-а до 17 цифр, мы увидели, что переменная d — это не совсем 0.1! Подобное происходит из-за ограничений в количестве выделяемой памяти для переменных типа double, а также в необходимости «округлять» числа. По факту мы получили типичную ошибку округления.
Подобные ошибки могут иметь неожиданные последствия:

Результат выполнения программы выше:
1
0.99999999999999989
Хотя мы ожидали, что d1 и d2 окажутся равными, но это не так. А что, если бы нам довелось сравнивать эти переменные и, исходя из результата, выполнять определённый сценарий? В таком случае ошибок нам не миновать.
Математические операции (например, сложение или умножение), как правило, только увеличивают масштаб этих ошибок. Даже если 0.1 имеет погрешность в 17-й значащей цифре, то при выполнении операции сложения десять раз, ошибка округления переместиться к 16-й значащей цифре.

Download 379.22 Kb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   16




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling