| 查看: 978 | 回复: 5 | ||
[求助]
fortran里的intrisic function: precision()x结果表示什么意思
|
||
|
我直观的理解,precision的结果表示的应该是数值精度即有效数字的位数。以上程序在CVF6.5里运行的,虽然precision返回的结果是6,但后面的结果不是表明fortran内部处理单精度数是按有效位数8位来处理的吗? 哪位高手来帮忙解惑,并讨论讨论对precision的理解。 [ Last edited by btx97 on 2013-6-19 at 22:14 ] |
» 猜你喜欢
参与限项
已经有3人回复
假如你的研究生提出不合理要求
已经有7人回复
实验室接单子
已经有4人回复
全日制(定向)博士
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
不自信的我
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
北核录用
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
fortran中函数string(i:i)表示什么意思,trim()表示什么意思
已经有4人回复
fortran中Idint函数是什么意思?
已经有4人回复
Fortran的subroutine和function有什么区别,是在于输入输出的特点吗?
已经有13人回复
【求助】FORTRAN中的这几个关键字是什么意思呢【已完结】
已经有4人回复
6楼2013-06-20 18:41:05
pippi6
铁杆木虫 (著名写手)
工程和科学数值计算咨询
- 应助: 413 (硕士)
- 贵宾: 0.002
- 金币: 7116.5
- 散金: 15
- 红花: 63
- 帖子: 1639
- 在线: 798.9小时
- 虫号: 2469437
- 注册: 2013-05-14
- 专业: 计算数学与科学工程计算
【答案】应助回帖
★
感谢参与,应助指数 +1
ben_ladeng: 金币+1, 谢谢指教 2013-06-20 21:50:31
感谢参与,应助指数 +1
ben_ladeng: 金币+1, 谢谢指教 2013-06-20 21:50:31
| precision 是fortran的一个内部函数, 标明实变量的十进制精度的取整字长。precision(x)=6 如果 x 是单精度,precision(x)=15 如果 x 是双精度。单精度使用24bit,一位作为符号,剩下的作为字长,所以十进制字长为 23*log10(2)=6.9236899,取整为6;类似双精度使用53bit, 字长为 52*log10(2)=15.65355977,取整为15。所以,双精度比单精度的两倍要高一些 :)。 |
2楼2013-06-20 07:18:26
pippi6
铁杆木虫 (著名写手)
工程和科学数值计算咨询
- 应助: 413 (硕士)
- 贵宾: 0.002
- 金币: 7116.5
- 散金: 15
- 红花: 63
- 帖子: 1639
- 在线: 798.9小时
- 虫号: 2469437
- 注册: 2013-05-14
- 专业: 计算数学与科学工程计算
3楼2013-06-20 07:46:19
4楼2013-06-20 12:46:12
pippi6
铁杆木虫 (著名写手)
工程和科学数值计算咨询
- 应助: 413 (硕士)
- 贵宾: 0.002
- 金币: 7116.5
- 散金: 15
- 红花: 63
- 帖子: 1639
- 在线: 798.9小时
- 虫号: 2469437
- 注册: 2013-05-14
- 专业: 计算数学与科学工程计算
【答案】应助回帖
★ ★ ★ ★ ★
btx97: 金币+5, ★★★很有帮助, 谢谢讨论 2013-06-20 17:13:39
btx97: 金币+5, ★★★很有帮助, 谢谢讨论 2013-06-20 17:13:39
|
这需要理解实数模型。以单精度为例, 在compag fortran里是 4 bytes =32 bits。其中 8 bits 是指数,23bits 是有效数字,1 bit 是符号。23 bits 最大可以 承载 2**23=8388608 = 10** 6.9236899 这么大的非负数字,在十进制里就是说最大位数为 log10 (2**23)=23*log10(2)= 6.9236899 。取整没什么意义,不过就是一般不说6.92位数字,而说6位数字。但我宁愿说接近7位有效数字,更不易误导。 有一点也许应该注意,compag fortran (以前的digital vax fortran)双精度存储的有效数字是56bits,但计算有效数字是53bits。相信intel fortran应类似。 详细可读 fortran help under ‘Model for Real Data ’ 和 'Data Representation'。 至于 write(*,*) 0.00052345678==0.00052345679 就是个试。write(*,*) 0.00042345678==0.00042345679 还是F呢。 |
5楼2013-06-20 13:36:17












回复此楼