Fortran Coder

查看: 34250|回复: 7
打印 上一主题 下一主题

[数值问题] fortran中的种别kind以及selected_real_kind的使用

[复制链接]

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
跳转到指定楼层
楼主
发表于 2017-6-1 09:27:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program test_kinds

implicit none

integer,parameter :: long=selected_real_kind(9,99)
real :: a=2.8_long

write(*,*) KIND(a)
write(*,*) long
write(*,*) precision(a)
write(*,*) range(a)
write(*,*) huge(a)

stop
end

输出结果分别为:
           4
           8
           6
          37
  3.4028235E+38
-----------------------------------------------------------
疑问:
1、KIND(a)和输出的long的数值,为什么不同?a的kind值不是通过语句real :: a=2.8_long指定的么?
2、定义的long的范围,是(9,99),为什么输出的precision和range是8和6?
3、输出的a的最大数值,不应该是10E99吗?

谢谢各位!

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
沙发
 楼主| 发表于 2017-6-1 22:13:42 | 显示全部楼层
pasuka 发表于 2017-6-1 10:52
请翻阅编译器帮助文档
The GNU Fortran Compiler: SELECTED_REAL_KIND
https://gcc.gnu.org/onlinedocs/gcc ...

看过例子明白了好多,多谢啦

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
板凳
 楼主| 发表于 2017-6-1 22:14:57 | 显示全部楼层
li913 发表于 2017-6-1 10:55
a的kind=4是由定义时决定的,而不是由其值决定。将双精度 2.8_long 赋值给a,并不会改变a的kind ...

嗯,感觉有点类似整形与实行相加的时候,会有自动类型转换。这个问题中,后面数字的kind值对前面变量的kind值没有影响。多谢啦

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
地板
 楼主| 发表于 2017-6-2 08:57:56 | 显示全部楼层
fcode 发表于 2017-6-2 08:00
selected_real_kind(9,99)
并不是选择恰好是精度9,幅度99的kind
计算机并没有提供这么丰富多彩的kind精度 ...

嗯嗯,得到的precision(a),应该小于等于selected_real_kind返回的kind所对于的精度。
谢谢你啦。。。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 11:22

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表