1. ホーム
  2. c++

[解決済み] 安定したコタンジェント

2022-03-05 17:34:33

質問

コタンジェント関数について、return 1.0/tan(x); よりも安定した実装はありますか?

どのように解決するのですか?

cot(x) = cos(x)/sin(x) よりもπ/2付近でより数値的に安定するはずです。 cot(x) = 1/tan(x) . を使って効率的に実装することができます。 sincos があるプラットフォームでは

もう一つの可能性は cot(x) = tan(M_PI_2 - x) . これは上記よりも高速になるはずです(たとえ sincos が利用可能です)、しかし、精度が落ちる可能性もあります。 M_PI_2 はもちろん超越数π/2の近似値に過ぎないので、その差である M_PI_2 - x の幅いっぱいの正確さにはならないでしょう。 double 運が悪ければ、意味のあるビットが数ビットしかないこともあります。