【问题标题】:expm1 for GNU gfortran [closed]GNU gfortran 的 expm1 [关闭]
【发布时间】:2015-05-22 10:08:01
【问题描述】:

有没有办法从 GNU Fortran 调用 expm1 的快速实现? 理想情况下,最好有一个函数来直接计算 (exp(x)-1)/x 以避免额外检查零参数。 expm1 的基本版本会特别有用。

【问题讨论】:

  • :)) 不是写的问题。它是书面和工作的。当您必须计算数十亿个时,问题是要快速获得它。数学库(例如 libm)确实对 exp 和 expm1 有单独的实现是有原因的...

标签: fortran gfortran exp


【解决方案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 关键字)。

【讨论】:

  • 谢谢!说得通。我会用它来看看我能从中获得多少性能。我想知道 gsl 的实现是否比 libm 快....
  • UPD:不,从gsl源码来看,不是……
猜你喜欢
  • 2021-08-12
  • 2012-07-14
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多