Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtPmNuIa 40 of 412 menu
◀ ▶

Неточные вычисления в Dart

Дробный счет иногда расходится с обычной арифметикой, потому что в битах дробь собирается из двоичных долей. Если число складывается из этих долей без хвоста, оно лежит в памяти точно. 0.5 - это половина, 0.25 - четверть:

print(0.5 + 0.25); // 0.75

Десятая доля из таких кусков не складывается ровно. В double помещается ближайшее значение примерно на 15 значащих цифр. На экран 0.1 все равно выходит коротко: печать показывает самую короткую десятичную запись, которая совпадает с лежащими в памяти битами:

print(0.1); // 0.1

Зазор проявляется в действии. Складываются не написанные десятые, а те ближайшие значения, которые реально лежат в байтах:

print(0.1 + 0.2); // 0.30000000000000004

Вычитание устроено так же:

print(0.3 - 0.1); // 0.19999999999999998

Умножение перемножает хранимые значения, а не школьные десятые:

print(0.1 * 3.0); // 0.30000000000000004

Хвост виден не в каждом действии. Иногда сумма двух приближенных чисел попадает в значение, чья короткая запись снова привычная:

print(0.1 + 0.1); // 0.2

Даны две переменные:

var num1 = 0.1; var num2 = 0.7;

Найдите сумму этих переменных и выведите ее. Посмотрите, совпадает ли вывод с 0.8.

Даны две переменные:

var num1 = 0.2; var num2 = 0.1;

Найдите сумму этих переменных и выведите ее. Посмотрите, совпадает ли вывод с 0.3.

Даны две переменные:

var num1 = 0.25; var num2 = 0.25;

Найдите сумму этих переменных и выведите ее. Посмотрите, совпадает ли вывод с 0.5.

Даны две переменные:

var num1 = 0.3; var num2 = 0.2;

Найдите разность этих переменных: вычтите вторую из первой и выведите ее. Посмотрите, совпадает ли вывод с 0.1.

Даны две переменные:

var num1 = 0.4; var num2 = 0.1;

Найдите разность этих переменных: вычтите вторую из первой и выведите ее. Посмотрите, совпадает ли вывод с 0.3.

Даны две переменные:

var num1 = 0.1; var num2 = 0.2;

Найдите произведение этих переменных и выведите его. Посмотрите, совпадает ли вывод с 0.02.

Даны две переменные:

var num1 = 0.2; var num2 = 3.0;

Найдите произведение этих переменных и выведите его. Посмотрите, совпадает ли вывод с 0.6.

Даны две переменные:

var num1 = 0.5; var num2 = 0.5;

Найдите произведение этих переменных и выведите его. Посмотрите, совпадает ли вывод с 0.25.

Даны три переменные:

var num1 = 0.1; var num2 = 0.2; var num3 = 0.3;

Найдите сумму этих переменных и выведите ее. Посмотрите, совпадает ли вывод с 0.6.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить