Задать вопрос
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

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

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

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

Похожие вопросы