110: Fractional の計算精度

↑up

現象

Double, Float の Fractional インスタンス定義において、 (**)tan などは、デフォルト定義にまかせている。

そのせいで、計算精度が落ちており、GHC での実行結果とずれてしまっている。 (sample288, 289)

デフォルト定義は Haskell 2010 によるものなので、 規格準拠という意味ではこれも許容されるかと思うが、 実装の「仕様」としてこれで確定するのは難がありそうなので、 公開までに改善したい。

調査ログ

2020-10-11 (Sun)

(**) , tan , tanh を Java 側でネイティブに処理するようにした。それによって、いくつかの誤差は解消したが、いくつか残ってしまった。 (test/expected/にある sample288.txt と sample288.txt.org の違い、299 も同様を参照)

cosh , asinh など、Math 関数を呼び出しているだけなので、 GHC の用いているライブラリと Java のライブラリの差に見える(が、詳細未調査)。

あまりこだわっても仕方がない気がするので、保留とする。