Haskellを書いていて、久しぶりに言語自体について不可解な挙動にぶち当たった。普段Haskellを書いていて、言語について「なんだこれ」と思うことはまずない。ところが、今回の疑問点は自分の理解を遥かに超える内容だった。最初はTwitterで質問してみたのだが、誰にも答えて頂けなかったので、stackoverflowで質問した。すると、見事に解決しまったので紹介する。 質問が長い。でも丁寧に書いたつもり。下の方に和訳も用意した。英語を読むのが面倒な人はそっちを読んでほしい。(自分が書いた英語を和訳するとか意味が分からんね。) http://stackoverflow.com/questions/25958007/ Why ghc changes the evaluation way due to the optimisation flag? Hello, I've encountered
How would one go about modeling units (seconds, meters, meters per second, etc) in Haskell? I'm particularly interested in getting the typechecker to verify proper usage, and do not want to restrict it to any particular numeric representation (i.e. both integral seconds and fractional seconds). If this can in fact be done, it could also be used to model coordinate system axes in, say, Geometric Al
きっかけ http://d.hatena.ne.jp/itchyny/20120304 この記事を見て、私も昔円周率を計算したことがあるのを思い出しました。 http://d.hatena.ne.jp/tanakh/20070506#p1 公式は同じくチュドノフスキーを使用、GHCのIntegerをそのまま用いて円周率を計算、 当時(5年前)のマシン(おそらくCore2あたり)で1億桁が15分ほどだったようです。 SPOJというサイトのコンテスト向けに、 $\sqrt{2}$ 200万桁計算の高速化 をCで書くとこから始めて、 ナイーブ乗算、カラツバ法、そしてFFT乗算の実装にいたり、円周率へ。 最初AGMを実装し、 古くて新しい方法、Arctan系の公式の実装を経て Binary Splitting Methodを知り、 チュドノフスキーの公式へ至りました。 さらにHaskellでの実装
4.7 - 2.3 * 2 == 0.1 は False↑の式は,算数的には True が返ってほしいもの.でも,プログラムの実行結果は False が返ってきてしまう.原因は浮動小数点小数の演算の誤差によるもの. 小数を扱うライブラリを開発するにあたり,この手の小数の誤差問題はよく出てくるけれど,これに対処する為に3つアプローチがある. ライブラリ側で丸めてしまう ライブラリの利用側で丸める テストでのみ,「だいたい合ってる」というテストにする (1) のアプローチはオススメしない.ライブラリで丸める,という事は,その丸め誤差をライブラリの利用者が知ってないといけないし,またライブラリの利用者はその丸め誤差を自分でコントロールできない. また,この類は小数だけでなく,巨大な整数でもケースが考えられる.「だいたい百より下の桁の数は別にどうだっていい…」っていう時とかね. だから (2),(
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く