В простой геометрической программе , написанной на Javascript и Canvas, когда я установил угол на 270 ° (1½π), я ожидал, что Math.cos ( θ ) перейдет кнуль.Вектор расположен прямо вниз от центра, на декартовой сетке нет расстояния x.Вместо этого я получаю это:
demo_angle = 270
ang = demo_angle * Math.PI / 180
x = Math.cos(ang)
console.log(x)
> -1.836909530733566e-16
Чтобы увидеть вывод математических функций, просмотрите консоль.Исходный код виден (в coffeescript) на один уровень выше в URL.
Мне пришлось определить в своем коде «любое число, абсолютное значение которого меньше 1e-15, следует считать нулевым», ноэто действительно неудовлетворительно.Излишне говорить, что когда я пытаюсь сделать математику с таким небольшим значением x
, тем более что я пытаюсь использовать x
в качестве знаменателя в расчете наклона, а затем выполняю некоторые квадратичные манипуляции, я в конечном итоге придумываю цифры, которыепревышать Number.MAX_VALUE (или Number.MIN_VALUE).
Я знаю, что математика с плавающей запятой на уровне ассемблера является чем-то вроде темного искусства, но такие результаты кажутся более странными, чем приемлемые.Любые намеки на то, что я должен делать?