有人可以解釋為什么下面代碼中的結果是 1 嗎?
> a <- 2^(-52)
> c <- 1
> a c
如果在上面的代碼中,“a”在添加時四舍五入為 0 或其他值,那么為什么下面的代碼不回傳零?
> a <- 2^(-52)
> b <- 2^(-53)
> a b
uj5u.com熱心網友回復:
您需要閱讀浮點運算:這個問題沒有涵蓋您的確切問題,但提供了有用的參考(更多在這里)。這兩個例子之間的區別在于,在第一種情況下,加數的比例非常不同,而在第二種情況下,它們的數量級相似。?.Machine會給你一些相關的值,特別是.Machine$double.eps(這是最小的數字 1 x > x)(雖然它不會為你解釋浮點運算)。
(@BrianMontgomery 的回答指出,從技術上講,這僅在您使用a <- 2^(-53)(或更小)時才成立。)
(我不認為這個答案很好,但是直到有人想更詳細地解釋這個例子背后的浮點問題之前,它才會有效。)
uj5u.com熱心網友回復:
它不是真正的 1,R 只是默認不顯示它。
另外,不要在 R 中使用 c 作為變數,因為 c() 是組合函式。
a <- 2^(-52)
d <- 1
e <- a d
e # shows 1
e - 1 # gives [1] 2.220446e-16
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333075.html
標籤:r
