Пакет Rmpfr
может получить больше цифр точности. В приведенном ниже примере я буду использовать точность 100 цифр.
library(Rmpfr)
d <- 100
zero <- mpfr(0, precBits = d)
one <- mpfr(1, precBits = d)
powers <- mpfr(2^(1:60), precBits = d)
result <- vector("list", length = length(powers))
temp2 <- zero
for(i in seq_along(powers)) {
temp2 = temp2 + one/powers[i]
iszero <- mpfrIs0(one/powers[i])
result[[i]] <- list(Exp = i, InvIsZero = iszero, Sum = temp2)
}
В вопросе ОП говорится, что
после 54-й итерации она достигает одной, но, видимо, нет
добавление объектов (даже увеличение параметра% .40f).
Очевидно, это связано с sprintf
, а не с результатами.
С помощью метода print.mpfr
:
for(i in 52:60){
print(result[[i]][[3]], digits = 60)
flush.console()
}
#1 'mpfr' number of precision 100 bits
#[1] 0.9999999999999997779553950749686919152736663818359375
#1 'mpfr' number of precision 100 bits
#[1] 0.99999999999999988897769753748434595763683319091796875
#1 'mpfr' number of precision 100 bits
#[1] 0.999999999999999944488848768742172978818416595458984375
#1 'mpfr' number of precision 100 bits
#[1] 0.9999999999999999722444243843710864894092082977294921875
#1 'mpfr' number of precision 100 bits
#[1] 0.99999999999999998612221219218554324470460414886474609375
#1 'mpfr' number of precision 100 bits
#[1] 0.999999999999999993061106096092771622352302074432373046875
#1 'mpfr' number of precision 100 bits
#[1] 0.9999999999999999965305530480463858111761510372161865234375
#1 'mpfr' number of precision 100 bits
#[1] 0.99999999999999999826527652402319290558807551860809326171875
#1 'mpfr' number of precision 100 bits
#[1] 0.999999999999999999132638262011596452794037759304046630859375
С sprintf
:
for(i in 52:60){
print(sprintf("%d - %.60f", i, result[[i]][[3]]))
flush.console()
}
#[1] "52 - 0.999999999999999777955395074968691915273666381835937500000000"
#[1] "53 - 0.999999999999999888977697537484345957636833190917968750000000"
#[1] "54 - 1.000000000000000000000000000000000000000000000000000000000000"
#[1] "55 - 1.000000000000000000000000000000000000000000000000000000000000"
#[1] "56 - 1.000000000000000000000000000000000000000000000000000000000000"
#[1] "57 - 1.000000000000000000000000000000000000000000000000000000000000"
#[1] "58 - 1.000000000000000000000000000000000000000000000000000000000000"
#[1] "59 - 1.000000000000000000000000000000000000000000000000000000000000"
#[1] "60 - 1.000000000000000000000000000000000000000000000000000000000000"