2014-11-17 1 views
-1

아래의 의사 코드를 Java로 변환 할 때 오류에 대한 질문이 있습니다. 잘라내 기 때문에 정확성이 떨어지는 문제는 없지만 찾을 수없는 프로그래밍 언어 문제가 있습니다.Pseudo Code to Java 번역 오류

나는 대답은 Math.pow()의 결과가 4.94065645841246544e-324d에서 1.79769313486231570e+308d에 두 번 (범위를 너무 많이 될 것이라고합니다. 그러나 분명히 더 잘못이와 나는 그것을 볼 수없는 것입니다하지만.

의사 코드

x = 7.0 
y = x^1000.0 
n = y truncated to an integer 

JAVA

double x, y; 
int n; 

x = 7.0; 
y = Math.pow(x,1000.0); 
n = (int)y; 
로 변환

많은 점에 감사 드리며, 여기에있는 문제를 정말로 이해하고 싶습니다. 당신이

+1

무슨 오류가 있습니까? 게시 한 코드에는 아무런 문제가 없습니다. – azurefrog

+0

어떤 결과를 얻고 무엇을 기대합니까? –

+1

7^1000은 약 1.25e845입니다. 그것은 두 배의 범위를 초과합니다. 긴 64 비트 정수는 -9.2e18에서 + 9.2e18까지 표현할 수 있습니다. 1.25e845도 긴 범위를 초과합니다. 이것은 번역이 아닌 자바의 언어 제한 문제입니다. –

답변

0

,

double x = 7.0; 
double y = Math.pow(x, 1000.0); // <-- INFINITY 

당신이 double의 정밀도를 초과 할 당신이 얻을 Double.POSITIVE_INFINITY

System.out.println(y); 

출력은 int에 당신이 얻을 캐스트 때

Infinity 

입니다 Integer.MAX_VALUE은 2^31-1 또는 2147483입니다. 당신은 당신이

int n = BigInteger.valueOf(7).pow(1000).intValue(); 
System.out.println(n); 

출력처럼 BigInteger를 사용할 수있는 더 확실한 결과를 얻고 싶은 경우에 647 물론

432069569 

이며, 실제 결과는 결과

System.out.println(BigInteger.valueOf(7).pow(1000)); 

에 의해 얻어진다 참으로 큰 숫자입니다.

+0

그래서 y = 무한대이고 캐스팅 할 때 n의 최대 정수 값을 얻습니다. 나는 두 번째가 발생한다는 것을 몰랐다. 정말 고마워. –