2014-05-11 3 views
-6

다른 숫자를 거듭 제곱하는 Java 프로그램을 작성 중입니다. Math.pow (8,4)와 8 * 8 * 8 * 8 사이에서 처리하는 데 더 짧은 시간이 필요합니까?Math.pow()와 * 연산자를 여러 번 처리하는 것이 더 빠릅니다.

+0

이미 모두 계산을 수행하는 것을 시도했다,의는'for' 루프를 사용하여 100 번 가정 해 봅시다? (단지 실행 시간을 비교하기 위해) – xav

+0

그들이 똑같은 일을하고 있다고 생각하면 ... – Mozzie

+0

@xav 큰 숫자를 사용하여 시도하지 않았습니다. Lemme 시도하고 다시 당신에게 – Aroniez

답변

-1

두 함수는 컴파일 타임에 계산되며 동일한 효율성을 갖습니다.

+0

내가 함수를 계산하는 데 걸리는 시간을 확인할 수있는 방법이 있습니까? – Aroniez

+0

다른 질문입니다. 무엇을 얻으려고 했습니까? –

+0

큰 숫자와 타이머를 사용하여 시도했지만 눈에 띄는 차이는 관찰 할 수 없습니다. 나는 차이점을 확인하기 위해 – Aroniez

0

확인이 작은 코드

long pr=1; 
long st=System.currentTimeMillis(); 
for(int i=0;i<200_00_00_000;i++) 
    pr=pr*8; 
long en=System.currentTimeMillis(); 
System.out.println("Executiom time : "+(en-st)); 

그것은이 코드를 당신에게 실행 시간을 줄 것이다.
Math.pow (8,200_00_00_000)에 대해서도 동일하게 수행하고 차이점을 찾으십시오.

p.s : Math.pow()이 더 빨리 실행됩니다. 멱 함수의

+0

나는 그것을 시도했으며 효과가 있었다. 감사합니다 – Aroniez

+0

-1 측정에 결함이 있습니다 (예열이 없으며 동작 결과 등을 사용하지 않음). 참조 http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java – assylias

+0

@assylias 링크 Thangx : – amanraj

0

효율 loop.You이 방식으로는 다음의 각 functionility 걸리는 시간을 확인할 수있는 것보다 더 크다 - 8^4 같은 간단한 조작의

double i=10; 
    java.util.Date dt=new java.util.Date(); 
    double z=(long) Math.pow (8,i); 
    java.util.Date dt1=new java.util.Date(); 
    System.out.println("Using Power formula:"+(dt1.getTime()-dt.getTime())); 
    double t=1; 
    for(double k=1;k<=i;k++){ 
     t*=8; 
    } 
    java.util.Date dt2=new java.util.Date(); 
    System.out.println("Using loop :"+(dt2.getTime()-dt1.getTime())); 
+0

측정 할 수 없습니다. Date와의 빠른 작업 ... http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java도 참조하십시오. – assylias

0

수동 승산 빠를 것이다. jmh 쇼 (나노초/영업 이익)를 사용하여 마이크로 벤치 마크 :

Benchmark     Mode Thr Cnt Sec   Mean Mean error Units 
c.a.p.SO23595573.mult  avgt 1  3 2  3.074  0.022 nsec/op 
c.a.p.SO23595573.pow  avgt 1  3 2  68.696  0.186 nsec/op 

코드 :

private int x = 8; 
private int y = 4; 

@GenerateMicroBenchmark 
public double mult() { 
    double result = x; 
    for (int i = 0; i < y - 1; i++) { 
     result *= x; 
    } 
    return result; 
} 

@GenerateMicroBenchmark 
public double pow() { 
    return Math.pow(x, y); 
} 
관련 문제