2016-02-11 2 views
0

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

-5.59924596431885e-320 

Это точное значение? Я знаю, что R обычно с точностью до 15 знаков после запятой, если число записывается так:

-2.1411372887 

Так научная нотация точно на таких небольших количествах?

+0

Точная по сравнению с чем? Компьютеры не имеют бесконечного уровня точности. Важно понимать пределы [арифметики с плавающей запятой] (http://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal). Но трудно говорить о точности, когда непонятно, какое «истинное» значение вы пытаетесь вычислить. – MrFlick

+1

Вопросы, которые были заданы раньше, как [Работа с очень маленькими номерами в R] (http://stackoverflow.com/questions/5802592/dealing-with-very-small-numbers-in-r) и [Обработка чрезвычайно малых номеров ] (http://stackoverflow.com/questions/26513029/handling-extremely-small-numbers) есть рекомендации, такие как 'Rmpfr',' gmp' и 'Brobdingnag'. Прошу продемонстрировать усилия, исследуя эти варианты. –

+0

Если это оценки параметров, то они фактически равны нулю, и это было бы так, если бы мощность 10 была даже такой же низкой, как -16. Понятие «точность до 15 мест» исходит из вопросов распространения ошибок при умножении чисел с плавающей запятой. Он также выходит за пределы допустимых значений для 'double'-класса в R, который указан на его странице справки как 2e-308 до 2e + 308. Поэтому я думаю, что «неточно» - вероятный ответ. –

ответ

3

Это не вопрос о R, а вопрос о представлении с плавающей запятой. Нормальные удваиваются с точностью до 15 или 16 десятичных цифр. Однако наименьшее нормальное двойное равен 2^-1022, или 2.225074e-308. Значения меньше, чем это можно представить двойниками, но вы начинаете терять точность, потому что значение будет дополнено нулями. Так, например, 1e-320 будет точным только до 3 или 4 десятичных цифр, так как оно примерно в 10-12 раз меньше min_double.

См: https://en.wikipedia.org/wiki/Denormal_number

Значения максимальной и минимальной двойной и машинной эпсилон хранятся в R, как .Machine. На моем компьютере:

> .Machine 
$double.eps 
[1] 2.220446e-16 

$double.neg.eps 
[1] 1.110223e-16 

$double.xmin 
[1] 2.225074e-308 

$double.xmax 
[1] 1.797693e+308 

$double.base 
[1] 2 

$double.digits 
[1] 53 

$double.rounding 
[1] 5 

$double.guard 
[1] 0 

$double.ulp.digits 
[1] -52 

$double.neg.ulp.digits 
[1] -53 

$double.exponent 
[1] 11 

$double.min.exp 
[1] -1022 

$double.max.exp 
[1] 1024 

$integer.max 
[1] 2147483647 

$sizeof.long 
[1] 8 

$sizeof.longlong 
[1] 8 

$sizeof.longdouble 
[1] 16 

$sizeof.pointer 
[1] 8 
+0

См. Вопрос, который у меня есть, когда вы говорите:« Нормальные удваиваются с точностью до 15 или 16 десятичных цифр », когда число написано в научной нотации, применимо ли это правило к целое число или только значение? – Plinth

2

Если вы используете IEEE-754 удваивается в R (и я 99,99% уверен, что вы есть), есть два минимальных значений:

  1. Нормированная минимум, который, как сказал @mrip, составляет около 2.22507e-308

  2. денормализованного минимума, который составляет около 4.94066e-324

Мораль истории: вы получаете денормы в своих расчетах, и нет, они не могут быть точными до 15 знаков после запятой

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