On 5/29/22 12:59 AM, Steven D'Aprano wrote:

tan() produces an output that is grossly
nonlinear (indeed wildly non-monotonic).

Why is that? The mathematical function tan is monotonically increasing
in the range [0, π/2). Shouldn't tan() be the same?

I am considering tan() *near* π/2 ... not just "less
than" π/2. See the graph:
  https://av8n.com/computer/img48/trig-function-accuracy.png

cot() is well behaved in this whole neighborhood but
tan() is singular.

To anticipate the obvious follow-up question: Why am
I considering the whole neighborhood?

That's because when dealing with roundoff errors, one
should prepare for *both* possibilities: some things
will get rounded down while other things will get
rounded up.

In our case, the IEEE double representation of π/2
gets rounded down ... but the representation of π
gets rounded up.
        tan(pi/2)       1.63312e+16
        cot(pi)         -8.16562e+15



Tangential remark:
This is why you should test for infinity using isinf(x)
rather than checking for bitwise equality x==inf. That's
because tanpi(0.5) could be +inf or it could just as
well be -inf.

Specifically:
        (inf == -inf) is false but isinf(-inf) is true.
_______________________________________________
gnumeric-list mailing list
gnumeric-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gnumeric-list

Reply via email to