2012-04-24 6 views
-1
내가 같은 코드가

, 난 내가 24 무한대 valuew을 얻을 수있는 방법 HENON 공식나는 무한대를 얻는다? 해결할 수 있습니까?

public class henon 
{ 
    public static void main(String[] args) 
    {   
     double a = 0.3; 
     double b = 1.4;  
     double k[] = new double[1026]; 
     k[0] = 0.01; 
     k[1] = 0.02;    

     for(int i = 0; i < 1024; i++) 
     {      
      k[i+2] = 1 - (a * Math.pow(k[i+1], 2) + b * k[i]);   
      System.out.println("nilai ke" + i +" adalah " + k[i]); 
     } 
    }    
} 

에서 번호를 시도, 25 ... 어떻게 해결 하는가?

+8

숨을 쉬고 문제를보다 명확하게 설명하십시오. –

+0

정확히 달성하려는 것은 무엇입니까? k []에 '0.01,0.02,0.98588 ....'이 있습니까? – Nikhar

+0

나는 헤논 공식 – user1209555

답변

0

BigDecimal 귀하의 요구 사항에 더 좋습니다. Joshua bloch가 Effective Java에서 말한 것처럼 정확한 결과를 얻으려면 double과 float가 유용하지 않습니다.

BigDecimal k[] = new BigDecimal[1026]; 
     k[0] = new BigDecimal(0.01); 
     k[1] = new BigDecimal(0.02); 
     for (int i = 2; i < k.length; i++) { 
      k[i]=new BigDecimal(0.0); 
     } 

bigdecimal의 double 값을 원하면 doubleValue() 메서드를 사용할 수 있습니다.

+0

bigdecimal은 저에게 새로운 것입니다 ... bigdecimal을 사용하여 double을 변경하려고 시도하지만이 double = 0.3에서 오류가 발생합니다. 이중 b = 1.4; – user1209555

+0

좋은 예를 들어 설명해 주겠다. 편집 된 대답을 볼 수있다. –

+0

메신저는 이미이 문제를 해결했지만 문제는 1 개있다. bigdecimal은 내 코드에 math.pow를 사용할 수 없다. pow 프로세스가있다. – user1209555

0

계산 결과가 double 데이터 형식 범위를 벗어 났으므로 "무한"값이 나타납니다.

범위가 더 필요하면 BigDecimal과 같이 bignum 라이브러리와 같은 것을 사용해야합니다.

+0

... 또는 BigDecimal에서 숫자를 얻으려고합니까? –

+0

@Marko, 물론 맞아, 나는 이것이 C 인 MPIR에 대한 나의 언급이라고 잘못 생각했다. Java와 더 관련이 있으므로 BigDecimal로 변경되었습니다. – paxdiablo

+0

사람들이 C 라이브러리를 원했기 때문에 제안이 모두 잘못되지는 않았습니다. BigDecimal은 그 카테고리에서 쓰레기지만, 시작하는 것이 훨씬 쉽습니다. –