gpt4 book ai didi

double - 使用 intel 11.1 编译器在 fortran 90 中获取 double

转载 作者:行者123 更新时间:2023-12-02 08:06:39 25 4
gpt4 key购买 nike

我有一个非常大的代码,用于建立并迭代求解非线性偏微分方程组,用 Fortran 编写。我需要所有变量都是 double 的。在我为代码编写的附加模块中,我将所有变量声明为 double 类型,但我的模块仍然使用旧源代码中声明为 real 类型的变量。所以我的问题是,当单精度变量乘以 Fortran 中的 double 变量时会发生什么?如果用于存储值的变量声明为 double ,结果是否为 double ?如果 double 值乘以末尾没有“D0”的常数会怎样?我可以在 Intel 11.1 中设置一个编译器选项来使所有实数/ double / double 常数吗?

最佳答案

所以我的问题是,在 fortran 中,当单精度变量乘以 double 变量时会发生什么? 单精度提升为 double ,并且运算以 double 完成。

如果用于存储值的变量声明为 double ,结果是否为 double ?不一定。右侧是一个表达式,它不“知道”左侧变量的精度,该变量将存储在左侧。如果Double = SingleA * SingleB(使用名称来指示类型),将以单精度进行计算,然后转换为double进行存储。这不会获得额外的计算精度!

如果一个 double 值乘以一个末尾没有“D0”的常量会怎么样?这就像第一个问题一样,常量将提升为 double 并计算以 double 完成。 但是,该常量仍然是单精度的,即使你像 double 常量一样写下了很多位,内部存储也是单精度的,无法代表该精度。例如,DoubleVar * 3.14159265359 将以 double 计算,但将以 double 计算近似于 DoubleVar * 3.14159。

如果您希望编译器在常量中保留许多数字,则必须指定常量的精度。 Fortran 90 的方法是根据您需要的任何精度定义您自己的实际类型,例如,要求至少 14 位十进制数字:

integer, parameter :: DoubleReal_K = selected_real_kind (14)
real (DoubleReal_K) :: A
A = 5.0_DoubleReal_K
A = A * 3.14159265359_DoubleReal_K

关于double - 使用 intel 11.1 编译器在 fortran 90 中获取 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5263157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com