2017-09-03 2 views
4

base4로 /에서 변환 할 때 Perl 6의 정밀도가 떨어집니다. 정밀도를 유지하는 방법? base(4)0.728295262649453로 변환 할 때perl6 precission base4 conversion

'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 에서처럼) catch-all입니다. –

답변

7

이 문제는 당신이 당신의 "perl6 출력"을 만든 방법으로 아마도 : say가이 주어 무엇에 .gist 메소드를 호출하기 때문에

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

이입니다. 또는 문자열을 지정하려고했습니다 (.Str을 호출하면 .gist과 같은 결과가 나타남). 당신이 결과에 .perl 메소드를 호출 할 경우

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

당신은 예상 0.728295262649453434278257191181182861328125를 얻을 수 할 . .perl 메서드는 원래 주어진 값을 얻기 위해 EVAL 수있는 문자열을 반환합니다. 당신은 당신이 원래 값 0.2322130120323232322110을 다시 얻을것을 볼 수

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

: 당신이 할 경우 어떤 경우

. 나는 이것이 단지 그것을 말하는 것보다는 그것을하는 것일 뿐이라고 생각한다. :-)

Rat.Str.perl 대신 .gist 사용해야 함을 주장 할 수 있습니다. 아마 그것은 주목해야 할 것입니다. 아마도이 질문을 할 필요가 없을 것입니다.