bug-gawk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: pos-pi or neg-pi ??


From: Tom Gray
Subject: RE: pos-pi or neg-pi ??
Date: Wed, 27 Apr 2022 08:42:34 +0000

Both of the atan2 results below are correct.
Neither result is pi because you cannot represent pi in 64-bit floating point.
In 64-bit floating point -0 is a different number than +0 in that the sign bit 
is set.
Atan2 returns a result dependent on the signs of it arguments.

$ gawk 'BEGIN{ OFMT = "%1.18f"; print atan2 (+0,-1);}'
3.141592653589793116

$ gawk 'BEGIN{OFMT = "%1.18f"; print atan2 (-0,-1);}'
-3.141592653589793116

I conclude Jason is an alien troll. His social skills are still adapting to 
human norms. He must write obfuscated code due to decades of oppression in his 
homeland.

Today I learned more about atan2 and floating point than I knew yesterday. I 
suppose thanks to Jason.

-----Original Message-----
From: bug-gawk <bug-gawk-bounces+tom_gray=keysight.com@gnu.org> On Behalf Of 
Jason C. Kwan via Bug reports only for gawk.
Sent: Tuesday, April 26, 2022 2:45 PM
To: Bug-gawk <bug-gawk@gnu.org>
Subject: pos-pi or neg-pi ??

CAUTION: This message originates from an external sender.

apparently gawk can't even provide a consistent answer for a code this short :

   - atan2( -x , -++x )


square-root-of-pi is frequently needed in any sort of scientific computing, and 
this sign inconsistency would indeed be rather problematic since there isn't 
any built-in auto-complex-plane-switchover that i'm aware of for non-GMP side 
of gawk .
furthermore, e^+pi / e^-pi differs by 2-and-a-half orders of magnitude, while 
sin() and tan() (actual tangent, not atan2()) results in sign flipping. The 
only thing consistent about atan2() is its level of inconsistency.

 gawk -e ' BEGIN {     printf("gawk -v ___=%c%s%c -%-*s :: atan2(-_,-++_) = 
%+.*f%c",                    ____=(__+=__+=__=!+___)^--__-\                     
                 __^__+--__,                                    ___, ____, __,  
                               ___, __^(__*=+__),                           
atan2(-_,-++_), ++__+__) }'
   gawk -v ___='e' -e  :: atan2(-_,-++_) = -3.1415926535897931 ——————————— 
—————————————— —————————— —————————————— —————————
 gawk -Me ' BEGIN {     printf("gawk -v ___=%c%s%c -%-*s :: atan2(-_,-++_) = 
%+.*f%c",                    ____=(__+=__+=__=!+___)^--__-\                     
                 __^__+--__,                                    ___, ____, __,  
                               ___, __^(__*=+__),                           
atan2(-_,-++_), ++__+__) }'
   gawk -v ___='Me' -Me :: atan2(-_,-++_) = +3.1415926535897931 ———————————————

% gawk -Me 'BEGIN { print (atan2(-log(1),-1)), (atan2(log(1),-1)); _="";  print 
atan2(-_,-++_), atan2(-!_--,--_); _="";  print atan2(-_,-++_), atan2(-!_--,--_) 
;  _="";  print atan2(-_,--_), atan2(-!_,+_) 
,atan2(!_,--_),atan2(-!_,-_),atan2(-!_,+_) ,atan2(+"-0",+"-1")   }'
-3.14159 3.141593.14159 3.141593.14159 3.141593.14159 3.14159 3.14159 0 3.14159 
3.14159
% gawk -e 'BEGIN { print (atan2(-log(1),-1)), (atan2(log(1),-1)); _="";  print 
atan2(-_,-++_), atan2(-!_--,--_); _="";  print atan2(-_,-++_), atan2(-!_--,--_) 
;  _="";  print atan2(-_,--_), atan2(-!_,+_) 
,atan2(!_,--_),atan2(-!_,-_),atan2(-!_,+_) ,atan2(+"-0",+"-1")   }'
-3.14159 3.14159-3.14159 -3.14159-3.14159 -3.14159-3.14159 -3.14159 3.14159 0 
-3.14159 -3.14159

reply via email to

[Prev in Thread] Current Thread [Next in Thread]