constexpr
、exp
、log
などの標準の<cmath>
関数のpow
バージョンを移植可能な方法で使用したいと思います。現在、移植性のないソリューションがあります g++
は、これらの関数をconstexpr
として扱います-C++の非準拠の拡張機能 ですが、移植性と将来性を心配しています(この拡張機能はいつかg++
から削除されるかもしれないと思います。
テンプレートメタプログラムではなく、これらの関数のconstexpr
バージョンに興味があります。コンパイル時と実行時の両方で同じ機能を利用できるようにしたいのです。 Cの互換性は必要ありませんが、高速な実装が必要です。Taylorシリーズの展開などの単純な実装は遅すぎます。
このような機能を実装するにはどうすればよいですか?exp
、log
、およびpow
に特に興味があります
私の研究から学んだいくつかの接線的に関連する事柄
constexpr
の設定)が必要なため、技術的にはerrno
ではありませんconstexpr
にすることが許可されていましたが、C++ 14では、これは禁止されています( この質問に対する最初の回答 および この質問への回答 )。これは、g++
の将来のバージョンでは、関数がconstexpr
にならない可能性があることを懸念する理由の一部です。g++
の各数学関数foo
の実装は、組み込み関数__builtin_foo
を呼び出しますが、これはconstexpr
として扱われます。 foo
関数ではなく__builtin_foo
関数の呼び出しを開始できます。対応するconstexpr
関数が準拠している場合でも、g++
の将来のバージョンではfoo
のままになる可能性がありますが、移植性はありません。Sprout の実装を見たことはありますか?
Sproutは、C++ 11/14 constexprベースのコンテナ、アルゴリズム、乱数、解析、レイトレーシング、シンセサイザーなどを提供するヘッダーのみのライブラリです。
https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/math