drj*_*rm3 11 precision fortran
我试图在gfortran中使用四倍精度,但似乎real*16不起作用.经过一些钓鱼后,我发现它可以实现为real*10.是real*10 实际上四倍精度?
如何测试代码的精度?是否有标准的简单算法来测试精度?例如,当我想弄清楚计算机零是什么时,我继续除以2.0直到达到0.0.跟踪值让我知道计算机何时'认为'我的非零数字为零 - 给我计算机零.
有没有一种很好的方法可以用我所描述的算法来计算精度?
M. *_* B. 12
添加到现有答案... real*N是语言的扩展,最好不要使用.真*10不是四倍精度.被称为"扩展" - 它是由英特尔处理器提供的10字节类型.real*16可能在gfortran上可用,也可能不在gfortran上,具体取决于libquadmath的编译器版本,硬件和可用性.如果在软件中提供,则会很慢.
要求所需精度的Fortran方法是使用selected_real_kind函数来定义所需精度的种类值.
integer, parameter :: QR_K = selected_real_kind (32)
real (kind=QR_K) :: MyReal
Run Code Online (Sandbox Code Playgroud)
如果可用,将获得四元实数.或者,使用Fortran 2008或更高版本,您可以"使用ISO_FORTRAN_ENV",然后可以访问类型值REAL128.如果精度不可用,则类型值将为-1.
一个相关的问题:"真正的*8"是什么意思?
使用现代Fortran代码的种类,即
real(some_kind_value) :: variable
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用selected_real_kind()或iso_fortran_env模块或c_long_double一种价值的iso_c_binding模块来获取类型的变量.所有这些都有不同的含义.
您可以使用epsilon(),tiny(),huge()或nearest()内在函数来评估你的代码的实际精度.
gfortran中的四精度通常需要libquadmath大多数平台都可用的库,但默认情况下可能不是.