pchisq увеличить точность десятичной дроби

Есть ли способ повысить точность десятичных дробей для вероятностных распределений.

> 1-pchisq(90, 5)
[1] 0

Но:

> pchisq(90, 5, lower.tail=F)
[1] 6.71932e-18

person Jasmine    schedule 15.07.2011    source источник
comment
Основываясь на комментариях ниже, вам, вероятно, потребуется прочитать о точности операций с плавающей запятой (см., Например, FAQ 7.31 в R FAQ). Есть способы выполнять вычисления с более высокой точностью (например, gmp package), но обычно лучше немного переосмыслить вашу проблему - вот почему, например, аргумент lower.tail существует изначально ...   -  person Ben Bolker    schedule 15.07.2011


Ответы (1)


Если вы делаете 1 - foo, чтобы получить верхнюю часть распределения, то не делайте этого. Вместо этого используйте аргумент lower.tail:

> pchisq(90, 5, lower.tail = FALSE)
[1] 6.719319e-18
person Gavin Simpson    schedule 15.07.2011
comment
Спасибо, но делаете это 1-6.7e-18 = 1 - person Jasmine; 15.07.2011
comment
Также проверьте аргумент log.p в ?pchisq - person Gavin Simpson; 15.07.2011
comment
Что касается компьютера, то показанное выше значение фактически равно 0 с учетом арифметики с плавающей запятой: Попробуйте all.equal(pchisq(90, 5, lower.tail = FALSE), 0) - person Gavin Simpson; 15.07.2011
comment
подсказка: .Machine$double.neg.eps - person Ben Bolker; 15.07.2011