CRlibmに見られるような正しく丸められた標準ライブラリ関数が利用可能であるとします。では、倍精度入力の正しく丸められた立方根を計算するにはどうすればよいでしょうか?
FAQ を引用すると、この質問は「[I] が直面している実際の問題」ではありません。これは宿題のようなものです。しかし、立方根は頻繁に見られる操作であり、この問題が誰かが直面している実際の問題であると想像することができます。
「最高のスタック オーバーフローの質問にはソース コードが少し含まれている」ため、ソース コードの一部を以下に示します。
y = pow(x, 1. / 3.);
1/3 は として正確に表現できないため、上記は正しく丸められた立方根を計算しませんdouble
。
その他の注意事項:
浮動小数点の立方根を計算する方法について説明している記事がありますが、アルゴリズムが正しく丸められた倍精度の立方根を計算するには、推奨されるニュートン ラフソン アルゴリズムの最後の反復をより高い精度で実行する必要があります。それはそれを計算するための最良の方法かもしれませんが、私はまだ既存の正しく丸められた標準化された関数を利用するショートカットを探しています.
C99 には関数が含まれていますが、すべてのコンパイラに対して正しく丸められたり、忠実cbrt()
であるとは期待できません。CRlibm の設計者は、提供される関数のリストに含めることを選択できましたが、そうしませんでした。正しく丸められた数学関数の他のライブラリで利用可能な実装への参照は大歓迎です。cbrt()