2017-09-03 5 views
4

ベース4との変換時にPerl 6の精度が失われています。どのように精度を保持するには? base(4)0.728295262649453を変換するときperl6 precission base4変換

'0.2322130120323232322110'.parse-base(4) 
--> perl6 output :   0.728295262649453 
--> high precission value: 0.728295262649453434278257191181182861328125 

問題があり、出力は、元の番号がありません。

0.72829526264945.base(4) 
--> output: 0.232213012032323232210333 
--> original: 0.2322130120323232322110 

私は、変換後に同じ値を得る方法を教えてください。

+0

浮動小数点数は、(負の)2の累乗を持つ人間型十進数に過ぎません。 –

+0

@JoopEggen:Perl 6は、あなたが求めていない限り、浮動小数点数を使用しません。 – piojo

+0

@piojo http://floating-point-gui.de/languages/perl/はそうでなければ示唆しています。私はPerl 6が内部エミュレーションのために浮動小数点では遅いとは想像できません。スカラーはちょうど(Basicのように)キャッチオールです。 –

答えて

7

問題は、あなたがあなたの「Perl6の出力」を作成した方法で、おそらくです:

say "0.2322130120323232322110".parse-base(4) # 0.72829526264945 

sayは、それが与えられているものは何でも上.gistメソッドを呼び出すためです。または、文字列化しようとしました(.Strを呼び出すと、.gistと同じ結果になります)。あなたが期待される0.728295262649453434278257191181182861328125を得る行う

say "0.2322130120323232322110".parse-base(4).perl 

:あなたは結果に.perlメソッドを呼び出したい場合。 .perlメソッドは、最初に与えられた値を取得するためにEVALという文字列を返します。いずれの場合においても

、あなたが行う場合:

say "0.2322130120323232322110".parse-base(4).base(4) 

を、あなたが元の値0.2322130120323232322110を取り戻す行うていることがわかります。私はこれを言っているのではなく、ちょうどそれをすることの一例だと思います。 :-)

一つRat.Str.perl代わりの.gist使用すべきであると主張することができます。おそらくそれは注意のポイントでなければならないでしょう。おそらく、あなたはこの質問をする必要がないでしょう。

関連する問題