2011-02-08 4 views
4

java.lang.Math 클래스의 수학 함수를 구현하는 데 어떤 알고리즘이 사용되는지 궁금합니다.java.lang.Math에서 사용되는 알고리즘은 무엇입니까?

예를 들어, sin (x) (또는 log (x))는 Taylor 계열의 요소 또는 다른 알고리즘의 합계로 구현됩니까?

+2

대부분 fpu 명령을 사용합니다. 자전거를 재발견하는 이유는 무엇입니까? 또한 VM implementaion에 따라 달라집니다 – Andrey

+1

@ 조이 여기에 당신을 위해 깜짝입니다 http://siyobik.info/index.php?module=x86&id=114 – Andrey

+1

@ 앤드류 - "아마도 ... 사용"아마 충분하지 않습니다. 또한 FPU 명령어는 어떤 알고리즘을 사용합니까? –

답변

0

당신은, 이러한 방법에 대한 네이티브 지원이 있지만 대부분의 JVM이 작업을 수행 할 기본 기계 코드 명령어를 사용하지 않는 시스템을위한 자바 라이브러리를 얻을 수있는 축복.

0

Jean-Michel Muller의 "초등 함수 : 알고리즘 및 구현"을 참조하십시오.

0

대답은 공급 업체 및 플랫폼에 따라 다릅니다. 여기에 Math 클래스의 javadoc이 주제에 말씀입니다 :

"StrictMath 클래스의 숫자 몇 가지 방법과는 달리, 클래스 Math의 등가 인 함수의 모든 구현은 비트 단위까지 같은를 반환 정의되지 않은 이러한 이완은 엄격한 재현성이 요구되지 않는보다 우수한 수행을 가능하게한다 "고 말했다.

"(단순히 구현을위한 StrictMath와에서 해당 메소드를 호출한다. 수학의 방법의 많은 기본적으로) 코드 생성기는, 가능한 경우, 더 높은 성능을 제공하는 플랫폼 고유의 네이티브 라이브러리 또는 마이크로 프로세서 명령어를 사용하는 것이 좋습니다 이러한 고성능 구현은 여전히 ​​Math의 사양을 준수해야합니다. "

일반적인 JVM은 FPU 명령어를 사용할 수있는 C 라이브러리에 대한 호출로 조작을 구현할 가능성이 있습니다. 하지만 일반화 할 수는 없습니다 ...

알고리즘이 엄격하게 지정된 수학 연산을 수행하려면 Math 대신 StrictMath을 사용해야합니다. 해당 운영체제의 StrictMath 버전은 모든 Java 플랫폼에서 동일한 대답을 제공하도록 보장됩니다 (이해합니다). 단점은 가장 느리게 진행될 가능성이 있다는 것입니다.

관련 문제