serpanok
@serpanok

Как убрать погрешность при умножении float переменных?

Добрый день.

Есть алгоритм, производящий вычисления.
const lat_start = 48.890;
	const lng_start = 37.675;

	const lat_step = 0.001;
	const lng_step = 0.002;

	for(let lat_i = 0.0; lat_i < 5.0; lat_i+=1.0)
	{
		for(let lng_i = 0.0; lng_i < 5.0; lng_i+=1.0)
		{
			let self_lat = lat_start + ( lat_i * lat_step );
			let self_lng = lng_start + ( lng_i * lng_step );

			console.warn(self_lat + ", " + self_lng);
		}
	}


и почти сразу получаем неточные числа.

5bec2aaf5b04a155221510.png

Как быть, если нужна точность тк при больших количествах итераций точность падает очень сильно?
  • Вопрос задан
  • 560 просмотров
Решения вопроса 1
@xtress
Web-dev
Это "абсолютно нормальное" поведение. Для справки - https://bit.ly/2B5HY9j - это иногда и к жертвам приводит :)
з.ы.
Если у вас просто умножение - попробуйте подойти с другой стороны:
мы же знаем , что если у первого множителя было 2 знака после запятой, а у второго 5, то у результата умножения будет 7 знаков после запятой (по крайней мере имеющих значение). Т.е.
NumberOfDecimalSigns(multiplier1) + NumberOfDecimalSigns(multiplier2) = NumberOfDecimalSigns(result);

А потом просто округлять ваши значение до получившегося выше количества знаков после запятой
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Никак не убрать, это особенности представления чисел в компьютере.
Можно использовать какую-либо библиотеку арифметики произвольной точности, например big.js или переписать свои вычисления, чтобы оперировать только целыми числами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы