2015-05-22 48 views
-1

有什麼辦法可以從GNU Fortran中快速實現expm1嗎? 理想情況下,最好有一個函數直接計算(exp(x)-1)/ x以避免額外檢查零參數。 expm1的元素版本會特別有用。GNU gfortran的expm1

+0

:))這不是寫它的問題。它是書面和工作。問題在於,如果你必須計算數十億的話,那麼速度就會很快。數學庫(例如libm)爲exp和expm1確實有單獨的實現是有原因的... – Roux

回答

1

這是它是如何從libm中稱爲:

use, intrinsic :: iso_c_binding, only: c_double 

    implicit none 

    interface 
    real(c_double) function expm1(x) bind(c, name='expm1') 
     import c_double 
     real(c_double), intent(in), value :: x 
    end function expm1 
    end interface 

    print*, expm1(3.4d0) 

end program 

如果該函數的glibc的源代碼看起來並不沮喪,那麼你可能希望它以使其元素轉化成的Fortran(如果元素你的意思是Fortran關鍵字)。

+0

謝謝!說得通。我會和它一起玩,看看我能從中獲得多少表現。我不知道gsl實現是否比libm更快。 – Roux

+0

UPD:不,從gsl源代碼判斷,它不是...... – Roux