Version 8 of tan

Updated 2007-11-02 20:36:51 by dgp

A function in the expr command that computes the tangent of an angle. The angle is expressed in radians.


2007-11-01 Harm Olthof: I was just wondering how to get tan return +/-Inf (and what choice it would make for the sign).

 59 % expr tan(acos(0))
  16331778728383844.0
 60 % expr tan(acos(0.0))
  16331778728383844.0
 61 % set pi 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
 62 % expr tan(double($pi/2.0))
  16331778728383844.0

DGP Somewhat more direct demonstration of the same thing:

 % expr tan(atan(Inf))
 16331778728383844.0

The arctan of infinity should be pi/2 radians. However, the value pi/2 is transcendental, with no accurate representation in a finite number of digits.

Computers by their nature represent numbers with only a finite number of digits, so atan(Inf) returns the best approximation it can:

% expr atan(Inf) 1.5707963267948966

Taking the tangent of that value which is near, but not exactly pi/2, yields an answer which is large, but not Inf.

This is all a natural expected consequence of the limited precision of floating point number representations in computers. It is not particular to Tcl. Calling the equivalent C functions shows the same thing.