1

私はニューラル ネットワークのコードを書いていますが、やるべきかどうか迷っています。double を使用しても良い結果が得られない可能性があり、コードを C++ などのより効率的な言語に移行する必要があるのではないかと、実際には少し心配しています。ここで、BigDecimal は double よりも 1000 倍遅いという質問を読みましたか? それは沢山。

一方、私は 10 進数で多くの作業を行う予定であり、より正確な数値を使用することは常に良いことです。精度が問題を引き起こす可能性があるかどうかもわかりません。私が見た実装のいずれもそれを行うとは思わないので、おそらくそれを行うつもりはありません。ただし、ネットワークが本来の動作をしないことがあります。それが精度エラーなのか、そのロジックの問題なのかはわかりません。

しかし、皆さんはお金を扱うときだけ BigDecimal を使用しますか? これについて何か考えはありますか?

4

6 に答える 6

4

ニューラル ネットワークの重みにJava のdoubleデータ型を使用することは、非常に適切に思えます。これは、エンジニアリングおよび科学アプリケーションに適しています。

ニューラル ネットワークは本質的に近似値です。の精度はBigDecimal、パフォーマンスへの影響はさておき、このアプリケーションでは無意味です。BigDecimal主に金融アプリケーション用に予約します。

于 2009-12-29T05:24:28.020 に答える
0

お金を扱うときは整数/倍長を使用します。double は絶対に使用しないでください。参照したいお金を処理するライブラリがいくつかあります。

しかし、私が思い出したように、お金の図書館は未熟であるか、開発が遅れています。

于 2009-12-29T04:17:29.077 に答える
0

固定小数点数 (通貨など) に浮動小数点 10 進数を絶対に使用しないでください。

過去に、BigDecimal インスタンスをラップするだけのカスタム Money クラスを使用しましたが、うまく機能し、問題はありませんでした。

于 2009-12-29T05:11:16.407 に答える
0

通貨と組み合わせた整数値と小数値の整数は、進むべき道です。ライブラリを見つけるか、独自のライブラリを作成してください。

于 2009-12-29T04:25:20.527 に答える
0

人はお金のために/を使うだけではありません。むしろ、またはを使用して利用できる精度よりも高い精度が必要なアプリケーションで使用されます。BigDecimalBigIntegerdoublelong

もちろん、 and を使用BigDecimalするとBigInteger、算術演算が大幅に遅くなります。たとえば、大きな数の足し算はO(N)Nあり、 は数値の有効桁数であり、乗算はO(N**2)です。

したがって、「大きな」アナログを使用するかどうかを決定する方法longdouble、アプリケーションが実際に必要とする精度を調べることです。Money アプリケーションは、1 セントも失うことなく値を表すことができる必要があります。他のアプリケーションも同様に精度に敏感です。

しかし、率直に言って、ニューラル ネットワーク アプリケーションに 10 進数で 13 桁の精度が必要だとは思いません。ネットワークが正常に動作しない理由は、おそらく精度とは関係ありません。IMO では、「実際の」ニューラル ネットワークが必ずしも本来の方法で動作するとは限らないという事実に関連している可能性が高くなります。

于 2009-12-29T09:42:22.123 に答える
-1

あなた自身のベンチマークを行い、それに基づいて決定してください....それは「人々が言うこと」を意味しません。

于 2009-12-29T05:16:02.763 に答える