2014-02-13 5 views
3

pow()을 사용하여 많은 능력을 계산하는 C/C++의 Visual Studio 2012 Professional (Windows)에서 프로그램을 작성하고 있습니다. 프로파일 러를 실행하여 실행하는 데 오랜 시간이 걸리는 이유를 확인한 결과 pow()이 병목 현상이라는 것을 알았습니다.Visual Studio 2012의 큐브 루트 함수 cbrt()

I은 ​​크게 프로그램의 속도를 향상 sqrt(x*x*x*sqrt(x))

x*sqrt(x)

pow(x,1.75) 그러한

pow(x,1.5) 같은 힘을 다시 하였다.

몇 힘

pow(x,1.0/3.0) 그래서 내가 일을 속도를 입방 루트 기능 cbrt()을 찾았다 종류의하지만 그것이 내가 거의 그래서 그러므로 내 질문에 상상할 수없는 비주얼 스튜디오에서 사용할 수없는 것 같다

을 어디에서 할 수있는 Visual Studio 2012 Professional에서 cbrt() 함수를 찾고 그렇지 않은 경우 pow(x,1.0/3.0)을 제외한 대체 무엇입니까?

종류와 관련,

에른스트 월

+3

VS2013 익스프레스를 사용하고 있습니까? – OneOfOne

+1

pow (x, 1.75)에 대해 x * sqrt (x * sqrt (x))를 사용하면 대안보다 약간 빠릅니다. (단 1 번만 더 빠르게 처리 할 수 ​​있습니다!) –

답변

4

This site가 C에 효율적으로 큐브 루트를 계산하기 위해 여러 가지 계산 방법을 탐구하고, 다운로드 할 수있는 몇 가지의 소스 코드가 있습니다.

(편집 "fast cube root"에 대한 구글 검색은 여러 유망 보이는 안타와 함께 제공됩니다.) 그들은 많은 일반적인 공식에 사용하고 있기 때문에

큐브 뿌리, 관심의 주제입니다 빠른 큐브 루트 함수는 Microsoft Visual Studio에 포함되어 있지 않습니다.

특별한 큐브 루트 함수가없는 경우, 전형적인 전략은 멱 함수 (예 : pow (x, 1.0/3.0))를 통한 계산입니다. 음수가 제대로 처리되지 않으면 속도와 정확성면에서 문제가 될 수 있습니다.

그의 사이트에는 사용 된 방법에 대한 벤치 마크가 있습니다. 모두가 pow()보다 훨씬 빠릅니다.

32-bit float tests 
---------------------------------------- 
cbrt_5f  8.8 ms 5 mbp 6.223 abp 
pow  144.5 ms 23 mbp 23.000 abp 
halley x 1 31.8 ms 15 mbp 18.961 abp 
halley x 2 59.0 ms 23 mbp 23.000 abp 
newton x 1 23.4 ms 10 mbp 12.525 abp 
newton x 2 48.9 ms 20 mbp 22.764 abp 
newton x 3 72.0 ms 23 mbp 23.000 abp 
newton x 4 89.6 ms 23 mbp 23.000 abp 

는 다운로드 소스 사이트를 참조하십시오.

+1

Golang Go의 구현에는 광범위한 어셈블리/go 수학 라이브러리가 있습니다. 기본 알고리즘은 많은 Go 지식없이 해독 가능해야하며 코드는 BSD 라이센스입니다. 'cbrt'에 대해서는 [here] (https://code.google.com/p/go/source/browse/src/pkg/math/cbrt.go)를 참조하십시오. – rubenvb

+0

이 대답은 내 질문에 완전히 대답하므로 받아 들일 것입니다. 이 대답! 고맙습니다. – EJG89

+4

이 답변이 게시되었으므로 연결된 사이트가 오프라인 상태입니다. 웨이 백 기계 링크 : http : //web.archive.org/web/20131227144655/http : //metamerist.com/cbrt/cbrt.htm – wakjah