代碼
root<-function(x){
a=0
b=1
while( a != b ){
a = b
b=0.5*(b + x/b)
}
b
}
問題
上面這段代碼用於求x的root值。在這裏有一個十分不專業的問題, 那就是a != b的寫法。
對於numeric的變量來說,使用 != 或者是 = = 是非常不專業的。針對整型數,這會返回正確的結果,但是由於機器精度,對於浮點數來說,他就“可能”會返回一個錯誤結果,於是在上述代碼中,該問題則會導致程序陷入While的無限循環。
解決方式
abs(a-b)<exp(-30)
對於向量形式的兩個變量,則可使用 max(abs(a-b))<exp(-30) 來返回兩個向量中的所有元素是否完全一致
PS:對於exp(n)中的n,可以按需選用。例如說,如果兩個浮點數的差距只有10的負十幾次方的話,n可以改爲-40,-50,-60…,省事一點的話,可以直接選到-100之類的,省去麻煩。