один пиксель
Jul. 4th, 2024 12:42 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)

Для программистов. Сегодня час искал баг в старом коде (задолго до меня написан). Код рассчитывает, на каком месте на экране - в пикселях - поставить цель, чтобы она была на заданном угловом расстоянии от центра экрана, с точки зрения наблюдателя на расстоянии ровно в метр от экрана точно по центру. Известны размеры экрана в пикселях и в миллиметрах.
Это чистая и очень простая тригонометрия. Но у меня получается на один пиксель разница с тем, что код раньше посчитал и записал в лог. Никак не могу понять, откуда этот пиксель берется. Округление там в другую сторону. Вычисления все в плавающей точке. Из-за того, как структурирован код и передача данных между компонентами, вычисления проводятся немного муторно, по сути лишний раз делается тангенс/арктангенс в середине. Может, это как-то накапливает ошибку? - но вроде не должно настолько.
Я напихал всюду отладочные сообщения, перезапустил, сравнил все с ручным пересчетом... и наконец нашел в самом последнем месте, которое и в голову не приходило. См. картинку.
no subject
Date: 2024-07-04 10:41 am (UTC)