IEEE754 - IEEE Standard for Floating-Point Arithmetic では、
atan2( 0, -0) = π
atan2(-0, -0) = -π
と定義されている。
R はこれに従っている。
> options(digits=16)
> atan2(0, 0)
[1] 0
> atan2(0, -0)
[1] 3.141592653589793
> atan2(-0, -0)
[1] -3.141592653589793
Octave でも R と同じである。
>> format long
>> atan2(0, 0)
ans = 0
>> atan2(0, -0)
ans = 3.141592653589793
>> atan2(-0, -0)
ans = -3.141592653589793
AWK/GAWK も R と同じである。
$ awk "BEGIN{print atan2(0, 0)}"
0
$ awk "BEGIN{print atan2(0, -0)}"
3.14159
$ awk "BEGIN{print atan2(-0, -0)}"
-3.14159
Julia は atan2(x, y) は atan(x, y) である。結果はいずれも 0.0 とされる。
julia> atan(0, 0)
0.0
julia> atan(0, -0)
0.0
julia> atan(-0, -0)
0.0
Python でも Julia と同じく,結果はいずれも 0.0 とされる。
>>> import math
>>> math.atan2(0, 0)
0.0
>>> math.atan2(0, -0)
0.0
>>> math.atan2(-0, -0)
0.0
C++ (Apple clang version 14.0.0 (clang-1400.0.29.202)) でも Julia と同じく,結果はいずれも 0.0 とされる。
#include <stdio.h>
#include <math.h>
int main()
{
printf("%f\n", atan2(0, 0));
printf("%f\n", atan2(0, -0));
printf("%f\n", atan2(-0, -0));
return 0;
}
$ ./a.out
0.000000
0.000000
0.000000
WolframAlpha では未定義とされる。
atan2(0, 0), atan2(0, -0), atan2(-0, -0)
いずれも,結果は "(未定義)" と表示される
※コメント投稿者のブログIDはブログ作成者のみに通知されます