2017-10-20 13 views

答えて

5

Perl 6のパフォーマンスは小数

ため有理数を使用することによって被るん私が最も有用な全体的な答えは「いいえ、ありません本当に、しかし、私は少し手の込んだましょう」だと思います。

あなただけ自動的にそしてちょうどRat Sを使用し、合理的に正確かつ迅速に小数の計算を維持するためのP6が欲しい場合は、精度や性能

を気にしないことを好む場合

。いずれかを含む式を計算する全体的な結果の分母以上P6 Rat sは64ビットをオーバーフローした場合

は次いでP6は自動的に妥当な性能を維持するために、近似Numdouble floatのP6の実装)に結果を切り替えます。

あなたは最高のパフォーマンス

を保証したい場合は、直接、小数のための浮動小数点データ型を使用することができます。

これは、一般的に合理的なパフォーマンスよりも速い浮動小数点のパフォーマンスをもたらします。

たとえば、3.141592e0は、有理数/小数のリテラルではなく、Num/floatリテラルです。上その後、数値演算

あなたは合理的なデータに建てタイプ(または基礎となるパラメータ化精度Rational role限られた精度Ratクラス;任意の精度FatRat class)のいずれかを使用した場合、100%の精度

を保証したい場合計算が分母に収まる場合、そのデータは100%正確になります。

は、合理的なタイプを使用してのパフォーマンスへの影響を理解する上での出発点についてthe wikipedia page on rational data typesを読みます。


は、誰もがベンチマークまたはこれを行うのパフォーマンスペナルティを理解している行っていますか?

ラリーウォールは、小数点以下の桁数をデフォルトにしてデザイン決定を行い、レターナルとして処理しました。 #perl6のパフォーマンスへの影響について議論しました。いくつかの有用な検索:

私はUへのリンクを見つけた場合私は後でそれらを追加します。

+0

詳細な回答ありがとうraiph –

+0

@RossAttrillよろしくお願いします。 thormickの答えは面白いです。 P6で合併症を使うときにシナリオや他の病理学的な減速に遭遇したら、私は興味がありますか? – raiph

2

現在のバージョンのPerl 6(Rakudo Star 2017.07)で合理的な問題の1つは、文字列に変換する際のパフォーマンス上の問題があるようです。

私は、CSVファイルをとり、もちろん多くの座標を持つSVG形式のグラフを出力するスクリプトをデバッグするときに気付きました。遅いですが、プロファイリングをするときに、スクリプトがsrc/core/Rational.Strで過度の時間を費やしていたことがわかりました。使用された時間は出力された数値の数に比例しませんでした(ほぼ6000ms近く11000匹のラット)。それらを出力する直前にNumメソッドで浮動小数点数に変換するだけで、スピードアップが大幅に向上しました(ただし、これとは異なる結果になりましたが)。

これは一般的な問題かスクリプト固有のものかどうかはわかりませんが、明らかに修正可能な実装上の欠点ですが、多くの数字を出力するとそれまでは気づいていたことです。

関連する問題