From macq at llnl.gov  Wed Apr 19 03:47:29 2006
From: macq at llnl.gov (Don MacQueen)
Date: Tue, 18 Apr 2006 18:47:29 -0700
Subject: [Rd] seq() function accuracy inacceptable
In-Reply-To: <20060418161910.E35EA1983E@slim.kubism.ku.dk>
References: <20060418161910.E35EA1983E@slim.kubism.ku.dk>
Message-ID: <p06230901c06b43a652d3@[192.168.2.7]>

Another thing to notice (rather than, it would seem, assume), is that 
using round() doesn't do any "better":

### without rounding
>  print(seq(61.55, 61.59, by=.01) , digits=22)
[1] 61.549999999999997 61.559999999999995 61.570000000000000 61.579999999999998
[5] 61.589999999999996

### with rounding
>  print(round(seq(61.55, 61.59, by=.01),2) , digits=22)
[1] 61.549999999999997 61.560000000000002 61.570000000000000 61.579999999999998
[5] 61.590000000000003

As Thomas and Henrik said, the sequence has to be calculated, and 
such calculations are not, and can not be, exact.

-Don

At 6:19 PM +0200 4/18/06, Johannes.Prix at wu-wien.ac.at wrote:
>Full_Name: Johannes Prix
>Version: 2.1.1
>OS: WinXP, SuSE Linux
>Submission from: (NULL) (137.208.41.195)
>
>
>
>The seq-command produces unnescessary inaccurate results, which can 
>be extremely
>annoying.  I absolutely do not see the nescessity of numerical 
>garbage to appear
>in the following simple case.  E.g. try this:
>
>>  seq ( 61.55 , 62.00 , by=0.01 ) - round ( seq ( 61.55 , 62.00 , by=0.01 ) ,
>digits=2 )
>
>Output looks like:
>
>  [1]  0.000000e+00 -7.105427e-15  0.000000e+00  0.000000e+00 -7.105427e-15
>-7.105427e-15  0.000000e+00  0.000000e+00
>  [9] -7.105427e-15  0.000000e+00  0.000000e+00  0.000000e+00 -7.105427e-15
>0.000000e+00  0.000000e+00 -7.105427e-15
>[17] -7.105427e-15  0.000000e+00  0.000000e+00 -7.105427e-15  0.000000e+00
>0.000000e+00 -7.105427e-15 -7.105427e-15
>[25]  0.000000e+00  0.000000e+00 -7.105427e-15  0.000000e+00  0.000000e+00
>-7.105427e-15 -7.105427e-15  0.000000e+00
>[33]  0.000000e+00 -7.105427e-15  0.000000e+00  0.000000e+00  0.000000e+00
>-7.105427e-15  0.000000e+00  0.000000e+00
>[41] -7.105427e-15 -7.105427e-15  0.000000e+00  0.000000e+00 -7.105427e-15
>0.000000e+00
>>
>
>It is particularly dangerous to use such seq()-contructed lists (without
>rounding) when e.g. trying to find the first time a given number 
>appears in the
>list and the number is given without numerical garbage.
>
>______________________________________________
>R-devel at r-project.org mailing list
>https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
---------------------------------
Don MacQueen
Lawrence Livermore National Laboratory
Livermore, CA, USA



[Rd] seq() function accuracy inacceptable
Don MacQueen