作者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