タグ

Javaと数学に関するalcusのブックマーク (4)

  • 浮動小数点数の二段階丸め誤差 - hydrakecat’s blog

    さいきん『浮動小数点数小話』という同人誌を読んでFMA (Fused Multiply-Add)の二段階丸め誤差(double rounding error)について色々と知る機会があったのでまとめておく。ついでにFMAに関するOpenJDKのバグっぽい挙動を見つけたのでそれも併せて記しておく。 FMA (Fused Multiply-Add)とは FMAは以下のような演算のことを呼ぶ。 この演算自体は行列の乗算やベクトルの内積の計算でよく現れるものであるが、通常の浮動小数点数の乗算と加算を別々に行うと誤差が出るので一度の演算で正確な値を算出したいときに用いる。たとえばC言語(C99)では fma、fmaf、fmalという3つの関数が導入されているらしい。 FMAの実装における二段階丸め誤差 FMAはターゲットとなるCPUのアーキテクチャがFMA命令をサポートしていればその命令を直接呼び出

    浮動小数点数の二段階丸め誤差 - hydrakecat’s blog
  • Java / Commons Math で一変数の関数を最適化する

    滅多なことがなければ使うことはないだろうけど、Commons Math の BrentOptimizer クラスを使って一変数の関数を最適化 (最小化 or 最大化) する方法をメモしておきます。 一変数関数の連続最適化問題 このエントリで言及している「一変数関数1の連続最適化」とは具体的に何かというと、「一変数の関数 $f(x)$ について、区間 $l \le x \le h$ における関数の最大値 (もしくは、最小値) およびそのときの $x$ を求める」ということに相当します。そして、この一変数関数の連続最適化問題を解く方法の一つとして、Brent 法が存在します。 Brent 法の実装は、FORTRAN によるものが netlib に fmin として存在しており、R の optimize() はこの FORTRAN 実装を C に翻訳したものを使っています。他には SciPy の

  • ND4J - Javaでベクトルとか行列を定義する - 覚えたら書く

    Javaでディープラーニングを試そうと思った場合に、名前があがっているライブラリはDeeplearning4J一択な気がします、現状は。 そのDeeplearning4Jの内部で使用されているのが、ND4J(N-Dimensional Arrays for Java)です。 ND4Jは、行列等のN次元配列を簡単に扱えるようにするための数値計算ライブラリです。 Python用に存在している数値計算ライブラリのNumPyを参考して作られたようです。 ディープラーニング云々の前にND4J自体も結構有用そうなので、とりあえず試してみます。 (時間の都合で、今回のエントリでは行列やベクトルを定義するとこまでしかやってません。演算は次の機会に・・・) 準備 ND4Jを利用するためにはpom.xmlに以下を追記します。 (質的なところではないのですが、ND4Jが内部でslf4jでロギングしているような

    ND4J - Javaでベクトルとか行列を定義する - 覚えたら書く
  • 「一様乱数の平均値を正規乱数として代用する」という話をゆるふわ統計的に検証する

    「一様乱数を足し合わせて平均値をとった値は正規分布っぽくなるよ」というツイートを見かけて、「それって統計的にどうなんだろう?」という疑問が湧いたので検証してみました。 はじめに 昨日・一昨日ぐらいに Twitter 上でちょっとした話題になっていた アニメーションの監修で、「 Random();の代わりに、(Random()+Random()+Rrandom()+Random()+Random())/5.0f; を使うと、動きにコクが出る」と言ったら、ピュアオーディオ扱いされるのですが・・・これは根拠のあるアルゴです。 — 深津 貴之 (@fladdict) 2016年11月3日 というツイートに関連して、「一様乱数の平均値を正規乱数として代用する」的なツイートをちらほら見かけて気になっていたので、統計的に検証してみましたよ、というブログエントリです (このツイート自体に対して揶揄するつも

    「一様乱数の平均値を正規乱数として代用する」という話をゆるふわ統計的に検証する
  • 1