首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在使用“`real(Wp)”的Fortran中,我会得到更多的准确性吗?

在使用“`real(Wp)”的Fortran中,我会得到更多的准确性吗?
EN

Stack Overflow用户
提问于 2020-01-07 10:11:46
回答 1查看 1.2K关注 0票数 1

通过替换所有的代码,我是否获得了更高的代码准确性:

real(dl) variable1

通过在每个Fortran90源文件的开头放置:

代码语言:javascript
代码运行次数:0
运行
复制
integer, parameter :: wp = selected_real_kind(15,307)

并声明如下变量:

代码语言:javascript
代码运行次数:0
运行
复制
real(wp) variable1

更新1

你说得对,一个简单的程序给出:

代码语言:javascript
代码运行次数:0
运行
复制
program  main

  implicit none

  integer, parameter :: dl = KIND(1.d0)
  integer, parameter :: wp = selected_real_kind(15,307)
  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)

  stop

end

以及产出:

代码语言:javascript
代码运行次数:0
运行
复制
epsilon for dl number   2.2204460492503131E-016
 precision for dl number          15
 epsilon for wp number   2.2204460492503131E-016
 precision for wp number          15

因此,没有必要使用wp = selected_real_kind(15,307)而不是dl = KIND(1.d0)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-07 10:59:40

一般情况下没有。

有两个问题:

  1. 是精度较高的wp?这取决于编译器和平台。
  2. 的数值结果是否随着浮点数精度的提高而提高?在某些情况下,精度受到算法或数据的限制,除了一个较慢的程序之外,您无法从中得到任何信息。

作为第一次诊断,无论如何,执行

代码语言:javascript
代码运行次数:0
运行
复制
write(*,*) 'dl =', dl
write(*,*) 'wp =', wp

看看它们是否真的是一样的。

然后,您可以获得有关以下类型的一些信息:

代码语言:javascript
代码运行次数:0
运行
复制
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所指出的,代码中还有很多地方需要检查数字表示的问题。

  • 文字常量需要特别注意。除非请求,否则instance.
  • Some函数的1.0/3.01._wp/3._wp值也将返回默认值(即单精度),例如real函数。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59626314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档