library(Matrix)
A <- matrix(c(3, 0, 0, 5, 1, -1, -2, 2, 4), ncol = 3, nrow = 3, byrow = T)
d <- as.integer(det(A))
p <- as.integer(prod(eigen(A)$values))
d == p
[1] FALSE
Когда я запускаю функцию класса, они оба являются «числовыми» и оба равны 18. Однако R говорит, что они не равны. В чем дело?
Возможно, еще один незначительный источник путаницы, as.integer() усекает, а не округляет. (Когда я запускаю это, d печатается как 17.)
интересно Он ответил: [1] "0x1.1ffffffffffffp + 4" [1] "0x1.2p + 4" Почему 'as.integer' не исправляет это?





Сравните
sprintf("%0.54f", det(A)); sprintf("%0.54f", prod(eigen(A)$values))(шестнадцатеричное представление чисел с плавающей запятой). Для компьютера они разные. Это одна из вещей, о которой вам нужно знать при использовании компьютерной программы, которая использует числа с плавающей запятой (как и большинство других).