2023年11月28日火曜日

汲めども尽きぬ悩みの泉

 こんなポストがありました。

https://twitter.com/sakaguc39782541/status/1728972290992525399

fx-CG50 で、atan(-1.33) が 約127 を返してほしい所、-53.06 を返す、というハナシの様です。
おそらく、DEG モードでの操作なのでしょうが、「そりゃあ、atan()の返戻値域は -pi/2...+pi/2 だかんね」。

pythonでは、どうだったか、と、調べたら、

>>> import math
>>> math.atan(-1.33)/math.pi*180
-53.06123726771017

まぁ、そりゃそうであります。返戻値域が同じなのですから。
Cやpython では、こうしたバヤイに利用できる、atan2() がありますネ。
>>> math.atan2(1.33,-1)/math.pi*180
126.93876273228983

同様に、計算機の数値関数で値域を換えたいならば、同等の機能を適用する別のAPIを使用する、という事になります。fx-CG50の場合、Arg 機能が利用できます。
上記の問題のバヤイ Arg -1+1.33i とやれば良さそう。

2 件のコメント:

Sentaro さんのコメント...

akatuki様、皆様、新年おめでとうございます!
今年もよろしくお願いします。

atan2の件ですがC.Basicにもatan2が必要ってリクエストあったのですが、
その時は直交座標と極座標変換関数のPolで代用できるのでとりあえず追加せずそのままですが、(^^;

Pol(-1,1.33)
答えはListに入るので
{1.664001202,126.9387627}

List Ans[2]としないといけないのがひと手間面倒なので
複素数関数のArgがスマートですね。(^^)

akatuki さんのコメント...

Sentaro 様、遅れておりまして申し訳ない。
謹賀新年、と、松の内が明けてから言うのもナニですが「あなたを待つのも松の内」ということで、平に御容赦戴きたく !
今年も宜しくお願い申し上げます。

> atan2の件ですがC.Basicにもatan2が必要ってリクエストあったのですが、
> その時は直交座標と極座標変換関数のPolで代用できるのでとりあえず追加せずそのままですが、(^^;

> List Ans[2]としないといけないのがひと手間面倒なので
> 複素数関数のArgがスマートですね。(^^)

お疲れ様です !
C.Basic は CASIO BASIC 「上位互換」を目指しておられるのでしょうから、機能拡充は大変嬉しいものでありますが、
CASIO BASICとの関係性もあり、悩ましいところではありますネ。

atan2 の実装も面白いのですが、複素数の扱いでは、多価関数という事もあり、返戻値域の設定が面倒でもあります。悩みどころ ... 。