Есть ошибка округления, но в этом случае R. не справляется с этим хорошо.
Любое представление чисел с плавающей точкой в R выполняется как double
, что означает 53 бита точности, приблизительно 16 цифр,Это также относится к 99.7
, вы можете увидеть, где он ломается:
print(99.7, digits=16) # works fine
print(99.7, digits=17) # Adds a 3 at the end on my platform
Это всегда будет предел, о котором вас предупреждают при указании его в печати (в документах).
Но когда вы выполняете вычисления, любая ошибка округления остается абсолютной, то есть ожидаемое значение .3 имеет абсолютную ошибку, которая столь же велика, но равна относительно 300раз больше.Следовательно, он «терпит неудачу» с менее значимыми цифрами:
print(100-99.7, digits=14) # works fine
print(100-99.7, digits=15) # Allready rounding error at digits=15
Теперь paste
передает любое число в функцию as.character
, которая (в этом случае, к сожалению) не смотрит ни на какие опции, которые вы установиливсегда используется значение по умолчанию 15 значащих цифр.
Чтобы решить эту проблему, вы можете использовать format
, чтобы указать желаемое количество цифр:
paste(format(100 - y, digits=14), "is the inverse")