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燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP