27

言語のコンパイル時関数評価機能を使用して、コンパイル時に std.math の多くを評価できるようにする D プログラミング言語標準ライブラリにパッチを提出しようとしています。コンパイル時の関数評価にはいくつかの制限がありますが、最も重要なものは次のとおりです。

  1. アセンブリ言語は使用できません。
  2. C コードまたはソースが利用できないコードを呼び出すことはできません。

いくつかの std.math 関数はこれらに違反しており、コンパイル時のバージョンを作成する必要があります。対数、指数、累乗、三角関数などを計算するための優れたアルゴリズムに関する情報はどこで入手できますか? 私は、次の 2 つの理由から、実際のコードよりもアルゴリズムの高レベルの説明だけを好みます。

  1. 法的なあいまいさを回避し、著作権を所有していることを確認するために、コードをソースと「十分に異なる」ように見せる必要を避けるため。

  2. シンプルで移植可能なアルゴリズムが必要です。少なくとも漸近的に効率的である限り、マイクロ最適化は気にしません。

編集: D のコンパイル時の関数評価モデルでは、コンパイル時に計算された浮動小数点の結果が実行時に計算された結果と異なる場合があるため、コンパイル時のアルゴリズムが実行時のバージョンとまったく同じ結果を返さなくてもかまいません。実際にかなりの程度まで精度が低下しない限り。

4

7 に答える 7

17

ジョン ハートコンピューター近似 1968 年、ジョン ワイリー & サンズ。

計算は、理想的には、実行時に行われた場合と正確に一致する必要があります。それは難しいかもしれません。多くの関数では、ドメイン全体ですぐに収束する級数はないため、アルゴリズムはさまざまなメソッドを貼り付けます。

また、さまざまな浮動小数点形式があります。現在、ほとんどのプラットフォーム (私が思うに) は IEEE 754 を使用しています。1985 年、私はクロスプラットフォームの浮動小数点形式を扱わなければなりませんでした。数値を少しずつつなぎ合わせて、ターゲット マシンで計算される値を正確に取得する必要があるため、正しく設定するのは非常に面倒でした。あなたがそれに対処しなければならないかどうかはわかりません。

于 2010-01-30T22:39:38.907 に答える
8

Jean-Michel Muller の本は、Hart と同様に優れた推奨事項です。

あなたが著作権を所有することは実際に必要ですか?回避できるのであれば、通常、数学ライブラリ関数を作成するビジネスに参入するのは悪い考えです (専門的にそうする人として私はそう言います)。D が BSD ライセンスのコードを取り込めるかどうかはわかりませんが、役に立ちそうな優れたオープンソースの実装がいくつかあります。たとえば、Sun のFDLIBMを見たいと思うかもしれません。Stephen Moshier のCephesも可能性がありますが、そのライセンス状況は少し奇妙ですが、彼は過去に他のライセンスの下で自分のコードを再配布することを喜んで許可していたと思います。

余談ですが、任意精度の浮動小数点をサポートしていない限り (D がサポートしているとは思いません)、通常、libm 関数の「漸近効率」という概念はありません。

于 2010-01-30T22:36:36.667 に答える
4

私が推奨する情報源は、RW Hamming による 科学者と技術者のための数値法です。

この本は Dover Press から発行されており、安価なペーパーバックです。

于 2010-01-30T22:25:28.900 に答える
3

Jean-Michel Muller著の本「Elementary Functions: Algorithms and Implementation」を参照してください。

于 2010-01-30T22:16:14.390 に答える
2

多分これはあなたを助けるでしょう(少なくともいくつかの機能のために): http://en.wikipedia.org/wiki/CORDIC

于 2010-01-30T22:19:35.193 に答える
2

以下を含むいくつかのソース:

Abramowitz と Stegun による「Handbook of Mathematical Functions」(オンラインで入手可能!)

ハート、「コンピュータ近似」(絶版だが良い)

「三角関数はどのように機能しますか?」や「組み込みシステムでの三角関数」など、三角法に関するその他の SO の質問も参照してください。

于 2010-01-30T22:19:40.690 に答える