perl6精度base4转换

问题描述 投票:4回答:1

转换为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

如何在转换后获得相同的值?

perl6
1个回答
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。也许这应该是一个关注点:它可能会阻止你提出这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.