mpmath의 "mpf"부동 소수점 bignums 형식의 작은 값의 아크 사인 함수를 계산해야합니다. 나는 "작은"값을 부르는작고 임의의 부동 소수점 값에 대해 arcsin 함수에 대해 가능한 가장 빠른 방법
예를 전자입니다/4/(10 ** 7) = 0.000000067957045711476130884 ... 여기
이 mpmath의 ASIN 내장 된 내 컴퓨터에서 테스트의 결과이다 기능 :import gmpy2
from mpmath import *
from time import time
mp.dps = 10**6
val=e/4/(10**7)
print "ready"
start=time()
temp=asin(val)
print "mpmath asin: "+str(time()-start)+" seconds"
>>> 155.108999968 seconds
이것은 특별한 경우입니다 : 작은을 위해 내가 다소 작은 숫자와 함께 작동, 그래서 실제로 특별한 경우 (대한 mpmath 뛰는 파이썬에서 그것을 계산하는 방법이 있는지 나 자신을 부탁 해요 = 값).
테일러 시리즈는 작은 인수로 매우 빠르게 수렴되기 때문에 실제로 여기에서 좋은 선택입니다. 그러나 나는 아직도 어떻게 든 계산을 더 가속화 할 필요가있다.
사실 몇 가지 문제가 있습니다.
1) 이진 분할은 인수를 작은 분수로 쓸 수있을 때만 빛나기 때문에 여기서는 효과가 없습니다. 완전한 정밀도 플로트가 여기에 주어집니다.
2) arcsin은 번갈아 사용하지 않는 시리즈이므로 Van Wijngaarden 또는 Sumalt 변환은 효과적이지 않습니다 (단, 번갈아 반복하지 않는 시리즈로 일반화하지는 않는 한). https://en.wikipedia.org/wiki/Van_Wijngaarden_transformation
내가 생각할 수있는 유일한 가속화는 Chebyshev 다항식입니다. Chebyshev 다항식이 arcsin 함수에 적용될 수 있습니까? 어떻게?
작은 값의 경우 'asin (x)'는'x'와 매우 비슷합니다 (Taylor 계열의 첫 번째 용어). 이게 정확하지 않니? –
'math.asin (0.000000067957045711476130884) -> 6.795704571147619e-08 '입니다. 즉, 마지막 숫자 만 정확하지 않습니다. '10^-22 '의 순서로 오류가 중요합니까? – Bakuriu
짧은 대답은 아니오입니다. 10^6 자리로 작업하는 경우 다른 많은 테일러 조건이 필요합니다. e/4/10^7의 경우 62500 계열 용어가 필요합니다. @Bakuriu는 mpmath가 출력하는 예제입니다. 나는 그것이 잘못되었다고 생각하지 않는다. – user2464424