2014-01-09 2 views
1

Я хотел бы знать, как я могу получить экспоненту большого отрицательного числа в R? Например, когда я пытаюсь:Вычислить экспоненту большого отрицательного значения в R

> exp(-6400) 
    [1] 0 
    > exp(-1200) 
    [1] 0 
    > exp(-2000) 
    [1] 0 

, но мне нужно значение этого выражения, даже если она настолько мала, как я могу получить его в R?

ответ

2

Эти цифры слишком малы. Чтобы узнать минимальное значение ваш компьютер может обрабатывать попробовать:

> .Machine$double.xmin 
[1] 2.225074e-308 

Даст вам (от ?.Machine)

наименьший ненулевой нормализованное число с плавающей запятой, мощность радикса, т.е. double.base^double.min.exp. Обычно 2.225074e-308.

В моем случае

> .Machine$double.base 
[1] 2 
> .Machine$double.min.exp 
[1] -1022 

На самом деле я могу вычислить полномочия до

> exp(-745) 

[1] 4.940656e-324

Ходить вокруг этого вопроса вам нужно infinite precision arithmetic.

В R можно добиться того, что с использованием пакета Rmpfr (PDF vignette)

library(Rmpfr) 
# Calculate exp(-100) 
> a <- mpfr(exp(-100), precBits=64) 
# exp(-1000) 
> a^10 

1 'mpfr' number of precision 64 bits 
[1] 5.07595889754945890823e-435 
# exp(-6400) 

> a^64 

1 'mpfr' number of precision 64 bits 
[1] 3.27578823787094497049e-2780 
# use an array of powers 

> ex <- c(10, 20, 50, 100, 500, 1000, 1e5) 
> a^ex 

7 'mpfr' numbers of precision 64 bits 
[1]  5.07595889754945890823e-435  2.57653587296115182772e-869 
[3] 3.36969414830892462745e-2172 1.13548386531474089222e-4343 
[5] 1.88757769782054893243e-21715 3.56294956530952353784e-43430 
[7] 1.51693678090513840149e-4342945 

Обратите внимание, что Rmpfr основан на GNU MPFR и требует GNU GMP. Под Linux вам понадобится gmp, gmp-devel, mpfr и mpfr-devel, которые будут установлены в вашей системе, чтобы установить эти пакеты, не зная, как это работает под Windows.

+0

Thnaks за ваш ответ. Если я применил его для вектора большого отрицательного значения, могу ли я это сделать или нет? – rose

+0

@rose: Конечно, я добавил несколько примеров. Обратите внимание, что я использую положительное значение, поскольку 'a' уже определено как' exp (-100) '. Также обратите внимание, что если вы продолжите снижаться в какой-то момент, вам нужно будет увеличить точность. Возможно, вам захочется взглянуть на страницу Википедии по [с плавающей точкой] (http://en.wikipedia.org/wiki/Floating_point) – nico

Смежные вопросы