완전히 언어 별 일 수 있으므로 여기서 자바를 예로 사용 하겠지만 일반적으로이 방법에 관심이 있습니다. 물론
, 간단하고 확실한 방법은 이것이다 :10의 힘을 얻는 가장 빠른 방법
Math.pow(10, x)
하지만 내가 아는 한, 전력은 매우 비용이 많이 드는 작업이다. 따라서 더 명백한 것처럼 보이기 때문에 더 좋은 방법이 있어야한다고 생각했습니다. 1 후에 x 제로가 필요합니다!
편집 : 예, 조숙 한 최적화 일 수 있습니다. 컨텍스트는 종종 이런 식으로 뭔가를 사용하여 n 개의 소수 자릿수로 반올림 동작입니다 :
private final static int[] powersOf10 = {1, 10, 100, 1000, 10000};
public static double round(double number, int decimals) {
if(decimals < 5)
return Math.rint(number/powersOf10[decimals]) * powersOf10[decimals];
double c = Math.pow(10, decimals);
return Math.rint(number * c)/c;
}
당신은 이미 가장 많이 사용되는 값에 대한 조회 테이블을 사용하여 볼 수 있듯이 이것은, 내가 사용하는 현재의 반올림 기능입니다, 하지만이 문제를 개선하기 위해 약간의 마법 같은 것이 있는지 궁금합니다.
이것은 조기 최적화의 명백한 사례처럼 들립니다. 이 라인에 상당한 시간이 소요되었음을 보여주는 통계가 있습니까? –
이진 수학에 대한 더 나은 이해를 얻으려면 흥미로운 질문이 있습니다. 문제는 수학 라이브러리가 제공하는 것보다 더 빠른 방법이 아니라는 것입니다. 그래서 명확하게하기 위해이 질문에 대한 이유를 설명해주십시오. (Ei가 최적화 질문인가, 아니면 궁금증 이니?) – n247s
사실 ...'Math.pow'는 [StrictMath.pow'에 위임합니다.] (http://grepcode.com/file/repository.grepcode. (C 언어로 쓰여진) (http : //www.java.sun.com/javk/java/language/jdk/ openjdk/8u40-b25/java/lang/StrictMath.java # StrictMath.pow % 28double % 2Cdouble % 29) //hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/native/java/lang/StrictMath.c)). 왜 더 빨리 * 필요합니까? 이것이 성능 저하로 생각되는 원인은 무엇입니까? – Makoto