一个简单的问题:
通过替换所有内容使代码的准确性更高:
real(dl) variable1
通过在每个Fortran90源文件的开头放置:
integer, parameter :: wp = selected_real_kind(15,307)
并像这样声明变量:
real(wp) variable1
?
一般编号
有两个问题:
wp是dl吗?这取决于编译器和平台。
浮点数精度的提高会改善数值结果吗?在某些情况下,准确性受算法或数据的限制,除了较慢的程序外,您从中什么也得不到。
无论如何,作为第一个诊断,执行>
write(*,*) 'dl =', dl write(*,*) 'wp =', wp
查看种类实际上是否相同。
然后,您可以获得有关种类的一些信息:
real(kind=dl) :: dl_number real(kind=wp) :: wp_number write(*,*) 'epsilon for dl number', epsilon(dl_number) write(*,*) 'precision for dl number', precision(dl_number) write(*,*) 'epsilon for wp number', epsilon(wp_number) write(*,*) 'precision for wp number', precision(wp_number)
[
epsilon
返回该类型的最小可表示数字,precision
返回十进制精度。
无论如何,您应该对计算和工作所需要的精度有所了解。
正如albert和Ian Bush指出的那样,代码中还有许多其他地方需要检查数字表示问题。
1.0/3.0
和1._wp/3._wp
具有明显不同的值。real
固有值。