转换为base4时,Perl 6的精度会下降.如何保持精度?
'0.2322130120323232322110'.parse-base(4)
--> perl6 output : 0.728295262649453
--> high precission value: 0.728295262649453434278257191181182861328125
Run Code Online (Sandbox Code Playgroud)
问题是,当转换0.728295262649453到base(4),输出是不是原来的号码.
0.72829526264945.base(4)
--> output: 0.232213012032323232210333
--> original: 0.2322130120323232322110
Run Code Online (Sandbox Code Playgroud)
请解释一下,如何在转换后获得相同的值?
问题可能在于您创建"perl6输出"的方式:
say "0.2322130120323232322110".parse-base(4) # 0.72829526264945
Run Code Online (Sandbox Code Playgroud)
这是因为无论给出什么,都要say调用.gist方法.或者您尝试对其进行字符串化(哪些调用.Str会产生相同的结果.gist).如果你.perl在结果上调用方法:
say "0.2322130120323232322110".parse-base(4).perl
Run Code Online (Sandbox Code Playgroud)
你确实得到了预期的0.728295262649453434278257191181182861328125.该.perl方法返回一个字符串,您可以EVAL获取最初给定的值.
无论如何,如果你这样做:
say "0.2322130120323232322110".parse-base(4).base(4)
Run Code Online (Sandbox Code Playgroud)
你会看到你确实得到了原来的价值0.2322130120323232322110.我想这只是一个只是做它而不是说它的情况.:-)
一个可以争辩说,.Str在Rat应该使用.perl代替.gist.也许这应该是一个关注点:它可能会阻止你提出这个问题.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |