問題タブ [numerical]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
generics - Scala:ジェネリッククラスで数値演算を行うための最良の方法は何ですか?
Scalaでは、>、/、*などの演算子を使用するジェネリッククラスを記述できるようにしたいと思いますが、これが機能するようにTを制約する方法がわかりません。
Ordered [T]でTを制約することを検討しましたが、RichXXX(RichIntなど)のみが拡張し、Intなどではないため、機能しないようです。Numeric[T]も見ましたが、これはScala 2.8でのみ使用できますか?
具体的な例を次に示します。
>などをサポートしていないTが多数あるため、このクラスはコンパイルされません。
考え?
今のところ、これを回避するためにMixInトレイトを使用しました。
元のクラスを変更すると、インスタンス化時にミックスインできます。
getMaxの書き直しに触発されたPSMitchは、次のとおりです。
algorithm - 組み合わせ問題と数値問題の違いは何ですか
それぞれの例を少なくとも 2 つ挙げてください。ありがとう。
c - NAG 数学ライブラリを使用してアプリケーションを再配布するには、クライアントにライセンスが必要ですか?
Numerical Algorithms Group (NAG) ライブラリを使用するアプリケーションの再配布に対処した人はいますか?
実行可能ファイルをビルドすると、ライセンス ファイルに環境変数を設定しないと実行されないようです。つまり、誰かにコードを渡した場合、ライセンスと関連するデーモンも必要になります。
それを回避する方法はありませんか?リンクするためのライセンスだけが必要だと思っていました。
.net - 行列演算を行うための F# 用の単純なラッパー
比較的長い投稿です。F# には現在、(コアではなく PowerPack にある)行列型とベクトル型があります。これは素晴らしい!Python の数値計算能力も第 3 部からです。
しかし、そこで提供される関数は行列演算とベクトル演算に限定されているため、反転や分解などを行うには、別のライブラリを使用する必要があります。私は現在、Math.Net プロジェクトに統合されている最新のdnAnalyticsを使用しています。しかし、Math.Net プロジェクトは 1 年以上にわたって公開されていません。継続する計画があるかどうかはわかりません。
次のラッパーを作成しました。このラッパーは、Matlab のような関数を使用して単純な線形代数を実行します。F# と FP は初めてなので、ラッパーとコードを改善するためのアドバイスをお願いします。ありがとう!
とテストコード
また、matlabと比較しました
タイミング (Duo Core 2.0GH、2GB メモリ、Matlab 2009a)
c - IEEE 浮動小数点を使用した最適化 - 保証された数学的同一性?
コンパイラの最適化を妨げている IEEE 浮動小数点規則に問題がありますが、これは明らかなようです。例えば、
NaN == NaN が false であるため、1 を返すように最適化することはできません。わかりました、大丈夫だと思います。
ただし、オプティマイザが実際に修正できるように記述したいと思います。すべてのフロートに当てはまる数学的同一性はありますか? たとえば、!(x - x) が常に保持されているとコンパイラが想定できるのであれば、喜んで !(x - x) を記述します (ただし、そうではありません)。
このような ID については、たとえばここなどで Web 上にいくつかの参照がありますが、IEEE 754 標準の軽いスキャンを含め、整理された情報は見つかりませんでした。
オプティマイザに isnormal(x) を想定させることができれば、(gcc または clang で) 追加のコードを生成する必要はありません。
明らかに、ソース コードに (x == x) を実際に記述するつもりはありませんが、インライン化用に設計された関数があります。関数は foo(float x, float y) として宣言できますが、多くの場合、x は 0、y は 0、または x と y は両方とも z などです。float は画面上の幾何学的座標を表します。これらはすべて、関数を使用せずに手動でコーディングした場合、0 と (x - x) を決して区別せず、ばかげたものを手動で最適化するだけです。そのため、関数をインライン展開した後にコンパイラが行う IEEE 規則についてはまったく気にしません。基本的に画面上で描画を行っているため、丸めの違いもそれほど重要ではありません。
関数がヘッダー ファイルに表示され、関数を使用する .c ファイルが -ffast-math でコンパイルされるのは適切ではないため、-ffast-math はオプションではないと思います。
java - 数値Javaライブラリ
私のコードのほとんどはJavaです。標準化されたアルゴリズムの場合:行列演算、FFT、...私は自分自身の純粋なJava実装を使用したくないので、安全でないFFI/JNI呼び出しを使用して完全に満足しています。
調べなければならないライブラリは何ですか?
ありがとう!
java - 数値のJavaコードを書くには?
純粋なJavaで数値アルゴリズムを実装するために読むべき良いリソースは何ですか?
JVM と GC の相互作用については何も知らないので、もっと知りたいと思っています。
javascript - 文字列を数値に変換するJavascript?
上記を変換する方法0.25?
.net - .NETでの浮動小数点エラーの処理
私はC#/。NETで科学計算と視覚化プロジェクトに取り組んでおり、doubleすべての物理量を表すためにsを使用しています。浮動小数点数には常に少しの丸めが含まれるため、次のような等価比較を行う簡単な方法があります。
かなり標準的です。
EPSILONただし、 「等しい」量の誤差が予想よりも大きい状況に遭遇すると、常に大きさを調整する必要があります。たとえば、5つの大きなdoublesを掛け合わせてから、5回割ると、精度が大幅に低下します。EPSILONを大きくしすぎることはできません。そうしないと、誤検知が発生しますが、それでも誤検知が発生します。
一般に、私たちのアプローチは、より数値的に安定したアルゴリズムを探すことでしたが、プログラムは非常に計算的であり、私たちができることはそれほど多くありません。
誰かがこの問題に対処するための良い戦略を持っていますか?タイプを少し調べましたが、Decimalパフォーマンスが心配で、問題が解決するのか、それともわかりにくいだけなのかを知るのに十分な知識がありません。これらの問題を解決できるかどうかを確認することで、中程度のパフォーマンスヒット(たとえば2倍)を受け入れるつもりDecimalですが、パフォーマンスは間違いなく懸念事項であり、コードはほとんど浮動小数点演算によって制限されているため、そうではないと思います不当な懸念。私は人々が100倍の違いを引用しているのを見てきましたが、それは間違いなく受け入れられないでしょう。
また、に切り替えるとDecimal、ライブラリでの一般的なサポートの欠如など、他の問題が発生するMathため、たとえば、独自の平方根関数を作成する必要があります。
何かアドバイス?
編集:ところで、私が(相対的な比較の代わりに)一定のイプシロンを使用しているという事実は私の質問のポイントではありません。例としてそこに置いておきますが、実際には私のコードの一部ではありません。数値が非常に大きくなり、その後再び小さくなると精度が低下することから問題が発生するため、相対比較に変更しても、質問に違いはありません。たとえば、値が1000の場合、一連の計算を実行すると、まったく同じ数値になるはずですが、精度が低下したため、実際には1001になります。次に、これらの数値を比較すると、相対比較を使用するか絶対比較を使用するかは重要ではありません(問題と規模に意味のある方法で比較を定義している限り)。
とにかく、Mitch Wheatが示唆したように、アルゴリズムの並べ替えは問題の解決に役立ちました。