我遇到了R中asin()
函數的奇怪行爲。我有一個偶爾計算爲-1的表達式,我傳遞給asin()
。有時asin()
以其他時間以NaNs produced
響應預期值asin(-1) = 1.57....
。asin()中的意外行爲
下面的代碼給出的例子(從更大的函數,計算生長度日昆蟲):
# works
tempMax <- 22.6
tempMin <- 10.0
threshold <- 10
meanT <- (tempMax + tempMin)/2
amplitude <- (tempMax - tempMin) /2
thetaSub <- ((threshold - meanT)/amplitude)
thetaOut <- asin(thetaSub)
# fails
tempMax <- 22.7
tempMin <- 10.0
threshold <- 10
meanT <- (tempMax + tempMin)/2
amplitude <- (tempMax - tempMin) /2
thetaSub <- ((threshold - meanT)/amplitude)
thetaOut <- asin(thetaSub)
注意,在這兩個例子thetaSub
的計算結果爲-1,但只asin
「作品」在第一個例子。
當tempMin == threshold
和tempMax
的整數值爲偶數且小數部分爲.7(例如22.7,24.7,26.7)時,測試函數似乎得到了NaN。
我懷疑這不是原因,但只是其他情況引發相同的錯誤。我猜這與thetaSub
的價值如何被asin
解釋有關,但我無法弄清楚爲什麼它有時會起作用,而不是其他的。
編輯。
@詹姆斯已經確定我的問題是浮點問題。我如何強制asin'忽略'小數位?
第二個'thetaSub'實際上低於'-1'。 –
回覆:您的編輯,我擴大了我的答案與可能的解決方案 – James