[R] Ceiling function gives me wrong answer
Daniel Nordlund
djnordlund at frontier.com
Thu Nov 29 08:28:28 CET 2012
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Ying Zheng
> Sent: Wednesday, November 28, 2012 6:11 PM
> To: r-help at r-project.org
> Subject: [R] Ceiling function gives me wrong answer
>
> Hi all,
>
> I have a very simple code, but gives a wrong answer.
>
> a=1000
> b=1000^(1/3)
> c=ceiling(a/b)
>
> then c=101,
>
> if change the code to be
> a=1000
> b=10
> c=ceiling(a/b)
>
> then c=100 is fine.
>
> Thank you for the help.
>
This is another variation on FAQ 7.31. You are trying to calculate the cube root using a power of 1/3. But 1/3 cannot be represented exactly in a finite binary floating-point system. If you print the value of b with enough digits you will see that it is not equal to 10 because the representation of the value 1/3 ends up being slightly smaller that one-third.
> print(1/3, digits=20)
[1] 0.33333333333333331483
>
> b <- 1000^(1/3)
> print(b, digits=20)
[1] 9.9999999999999982236
Hope this is helpful,
Dan
Daniel Nordlund
Bothell, WA USA
More information about the R-help
mailing list