转换为base4时,Perl 6的精度会下降。如何保持精度?
'0.2322130120323232322110'.parse-base(4)
--> perl6 output : 0.728295262649453
--> high precission value: 0.728295262649453434278257191181182861328125
问题是,在将0.728295262649453
转换为base(4)
时,输出不是原始数字。
0.72829526264945.base(4)
--> output: 0.232213012032323232210333
--> original: 0.2322130120323232322110
如何在转换后获得相同的值?
答案 0 :(得分:7)
问题可能在于您创建“perl6输出”的方式:
say "0.2322130120323232322110".parse-base(4) # 0.72829526264945
这是因为say
会根据给定的.gist
方法调用.Str
方法。或者您尝试对其进行字符串化(调用.gist
,其结果与.perl
相同)。如果您在结果上调用say "0.2322130120323232322110".parse-base(4).perl
方法:
0.728295262649453434278257191181182861328125
你做获得预期的.perl
。 EVAL
方法返回一个字符串,您可以say "0.2322130120323232322110".parse-base(4).base(4)
来获取最初给定的值。
无论如何,如果你这样做:
0.2322130120323232322110
您将看到做取回原始值.Str
。我想这只是一个只是做它而不是说它的情况。 : - )
一个可以认为Rat
上的.perl
应该使用.gist
而不是HashSet
。也许这应该是一个关注点:它可能会阻止你提出这个问题。