fortran - 如何将真正精度的类型传递给 Fortran 中的函数和子例程?
问题描述
我想让 Fortran 中的子例程和函数支持实数的单精度和双精度,以及各种变量的其他类型,与 Fortran 中的内在函数相同。如果 x 是双精度,sin(x) 会给我们正弦函数的双精度值,而单精度是 x 是单精度。
我编写了以下测试,并声明了我的常量 a64 和 b64 并将它们与它们的 kind 值 (8) 相关联。如果输入变量 a 和 b 为双精度,我希望我的函数divide_real输出双精度结果,如果输入为单精度,则输出单精度。这可以通过将 rk 参数包含为函数的输入来实现,但编译器抱怨 rk 未声明或者是不简化为常量表达式的变量(GNU 编译器)。
关于如何让它工作的任何提示?
program test_kinds
implicit none
real(kind=4) :: a32,b32
real(kind=8) :: a64,b64,divide_reals
a64=atan(0.40)
b64=atan(0.30)
a32=a64
b32=b64
write(*,*) '32 bits :: ',divide_reals(a32,b32,4)
write(*,*) '64 bits :: ',divide_reals(a64,b64,8)
end program test_kinds
function divide_reals(a,b,rk)
implicit none
integer,intent(in) :: rk
real(kind=rk),intent(in) :: a,b
real(kind=rk) :: divide_reals
divide_reals=a/b
end function divide_reals
解决方案
推荐阅读
- macos - Sparkle - 通过 ssh 的 sign_update:“无法访问钥匙串中所需的密钥”?
- r - 如何在R中编写一个将“\”更改为“/”的函数
- java - 为 Hbase 连接器 Kafka 使用无模式 JSON 转换器
- time-series - 使用 MICE 包进行插补减少了行数
- dictionary - 如果第一个键是数字,则 RF 3.0.4 嵌套字典语法错误,点符号不起作用
- python - Django loaddata 忽略现有对象
- solr - DataImportHandlerException:无法执行查询:选择
从 处理文件 - c# - 如何在 C# Windows 窗体应用程序中使用 aes_encrypt
- javascript - 如何在 React 的 Get 请求中放置路径变量?
- php - Composer 库不能通过回调函数工作