Fortran 板


LINE

所谓的经验,绝对 不是ㄧ个数字, 或是 ㄧ组数字。 那是 ㄧ个简单的 说法。 所谓的经验,是累积了很多实务上 解决问题的经验, 能够 case by case 的针对 新的问题, 想出一个或 数个迅速解决问题的 方法。 回到原先的问题。 real*4 , or real*8 x, y, z sqrt(x) --> y 如何证明 y 是整数。 如果 限定 x <= +2147483647 那麽, let x= +2147483647 y= x - 1 sqrt(x) --> x1 sqrt(y) --> y1 eps= fabs(x1 - y1)*0.8 // * 0.8 , is a margine 考量 如此ㄧ来,任何数的 sqrt(x) --> y y 的四舍五入 --> iy if (fabs(y - iy) < eps ) then // y is a integer end if 针对以上,请问大家 是否同意? ※ 引述《perturb (背後有老板)》之铭言: : 我这帖虽纯属抬杠 : 但也是为了讨论问题 : 请sjgau朋友宽恕则个 : 实际应用中我自己也是定义一个eps : 这个值针对不同具体问题有所不同 : 对於实际问题当相对误差小於这个值的时候这个误差就可以忽略不计了 : 但是这个值是否完全只能靠经验呢? 那也未必见得 : 比如下面这个例子 : PROGRAM TEST : IMPLICIT NONE : real(4)::r4, y, iy : real(4), parameter::eps = 1.0E-5 : logical, external::ISINT : integer::I : do I=-3,3 : r4 = 1. + eps*I : y = sqrt(r4) : iy = nint(y) : write(*, *)r4, y, iy, ISINT(y, iy) : enddo : END : FUNCTION ISINT(y, iy) : implicit none : real(4)::y, iy : real(4), parameter::eps=1.0E-5 : logical::ISINT : if (abs(y-iy)/min(abs(y), abs(iy)) < eps) then : ISINT = .TRUE. : else : ISINT = .FALSE. : endif : END FUNCTION ISINT : 按照sjgau朋友给出的标准1-2EPS, 1+2 EPS这个区间能够由real*4表示的数开平方都被 : 当成整数, 这当然在实际问题中很多时候可以接受这个近似 : 这个例子构造的时候实际是利用 d log(x^2) = 2 d log(x) : 即开平方後近似有相对误差减半 : 也可以反推出你对x可以容忍的相对误差为e的话, 那个判断里面的EPS就可以取成e/2 : 具体到这个问题可以有个计算精度误差内的精确判断 : y=sqrt(x) : I=aint(y) : 用abs(x-I*I) < spacing(x) 来判断 : 我虽然没测试但是认为对於0<=x<=HUGE(1)应该是没太大问题的 : 对於一般的复杂的算式 : 其实也可以估算误差的 : 比如y=f(x) 精确值是x0, y0 由dy~f'(x0)dx : 我们假定库函数求值对於计算精度内是精确的 : 则可以知道abs(y-y0) <= max( spacing(y), |f'(x)| spacing(x) ) : 不过一般没这个必要就是了 : ※ 引述《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) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.104.67
1F:→ blc:就原来的问题而言,用不到浮点数… 12/28 14:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP