作者sjgau (sjgau)
看板Fortran
标题Re: [问题] 可以判断整数吗?
时间Sun Dec 26 09:48:12 2010
重点是
real*4
rel_diff(a, b) < 1.0e-5
real*8
rel_diff(a, b) < 1.0e-14
那个 e-5, e-14 的数字,是怎麽来的?
答案是:经验!
※ 引述《sjgau (sjgau)》之铭言:
: 我会!
: real*4, or real*8 都可以。
: real*4 x, y, z;
: x= 16.0
: y= sqrt(x)
: iy= int(y + 0.5)
: ! int() 还要 查ㄧ下,目的是 把 y 四舍五入,
: ! 取最接近的 整数
: if (rel_diff(iy, y) < 1.0e-5) then
: ! y 是整数
: else
: ! y 不是整数
: end if
: ! rel_diff(a, b) 是自己写的 副程式, 计算 a, b 的相对误差
: ! 相对误差等於 = (abs_diff(a, b))/max(abs(a), abs(b))
: ! abs_diff(a, b) 是自己写的副程式,求 a, b 两个数字的 绝对误差
: ! 绝对误差= abs(a - b)
: ※ 引述《pillbox1989 (如履薄冰)》之铭言:
: : 我想要确定开方後的值是整数
: : 利用if 判断
: : 但是一直想不到限制条件可以打甚麽?
: : 还是有其他更好的方法呢?
: : 谢谢大家
--
e-mail:
[email protected]
我的课程介绍网页:
http://www.csie.ntu.edu.tw/train/teacher_display.php?num=18
AutoCAD 台湾地区菁英讲师获选
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.82
1F:→ perturb:这个还真不是用经验, 而是IEEE 743 12/26 10:57
3F:→ sjgau:那个东西,是工业标准。但是,在使用上,还是要调整ㄧ下,这 12/26 11:15
4F:→ sjgau:这是 经验。real*8 的精确度是 52个 bits, 理论上是 12/26 11:17
5F:→ sjgau:2^(-52), 但是要取 安全余域,margine 12/26 11:18
6F:→ perturb:fortran里面的spacing函数就是做这个的 12/26 11:38