Feature request: add degToRad and radToDeg to phobos / tango

Don Clugston dac at nospam.com.au
Wed Apr 2 07:19:23 PDT 2008


Spacen Jasset wrote:
> Hello,
> 
> I have a suggestion for a small feature. The reason for adding these 
> conversions would be to prevent mistakes and a small utilitarian gain.
> 
> real degToRad(real deg)
> {
>     return deg * PI / 180;
> }
> 
> real radToDeg(real rad)
> {
>     return (180 * rad) / PI;
> }

It's not that simple. The code looks OK, and works OK if rad is less than 2*PI. 
But once you get to multiple revolutions, you expose the roundoff error in PI.
The proper way to deal with this is with sinPi(), cosPi()  (they're in Tango, 
not yet in Phobos) and with modPi() which I haven't yet written, but uses a 
high-precision value of pi.

Standard libraries have a responsibility to not include code which can generate 
subtle errors. The correct code takes much longer to write. But it's coming.


> 
> 
> Or as Derek Parnell sugested (although I don't understand the 
> operational difference here, but the top one did originally read float 
> instead of real.
> 
> enum
> {
>    fPI_180 = PI / 180.0L;
>    f180_PI = 180.0L / PI;
> }
> 
> T degToRad(T)(T deg)
> {
>     return cast(T)(cast(real)deg * fPI_180);
> }
> 
> T radToDeg(T)(T rad)
> {
>     return cast(T)(cast(real)rad * f180_PI);
> }
> 
> 
> Perhaps also gradToRad etc. Or gonToRad sice the gon is meant to be the 
> proper ISO unit. People don't seem to use Grad much though.



More information about the Digitalmars-d mailing list