LINUX.ORG.RU

[R] задать точность арифметики


0

1

Пример, для точности до 0.001. Человек подсчитал бы на калькуляторе 2/3 + 1/19 так (способ 1):

2/3  = 0.6666666666 = 0.667
1/19 = 0.0526315789 = 0.053
2/3 + 1/19 = 0.667 + 0.053 = 0.720

R считает так (способ 2):

2/3 + 1/19 = 0.6666666666... + 0.0526315789... = 0.7192982455... = 0.719 != 0.720

Нужно рассчитать длинную многоэтажную формулу способом #1. Если при этом каждую операцию округлять, она станет нечитабельной:

... round(round(x+y, 3) + z, 3) ... и так далее

Как задать точность вычисления в R (число цифр после запятой) т. е. округление для каждой операции?


А что-то типа trunc в это вашем R есть? //не работал ни разу

adriano32 ★★★ ()

Округление для каждой операции, наверное, неразумно --- можно потерять точность.

Выводить результат каждой операции с заданной точностью можно так:

options(digits=4)

Либо использовать функции signif(x,digits=4) или round(x,digits=4).

oami ★★ ()
Ответ на: комментарий от oami

Для точности до третьего знака надо использовать digits=3.

oami ★★ ()

все таки R это такой модифицированный лисп :)

For numerical and complex values, remember ‘==’ and ‘!=’ do not
allow for the finite representation of fractions, nor for rounding
error. Using ‘all.equal’ with ‘identical’ is almost always
preferable. See the examples.

‘all.equal(x,y)’ is a utility to compare R objects ‘x’ and ‘y’
testing ‘near equality’. If they are different, comparison is
still made to some extent, and a report of the differences is
returned. Don't use ‘all.equal’ directly in ‘if’
expressions-either use ‘isTRUE(all.equal(....))’ or ‘identical’ if
appropriate.


psv1967 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.