[R] understanding integer divide (%/%)

2007-01-03 Thread Jeffrey Prisbrey
I am confused about why the following occurs:

 version
   _   
platform   i386-pc-mingw32 
arch   i386
os mingw32 
system i386, mingw32   
status 
major  2   
minor  4.0 
year   2006
month  10  
day03  
svn rev39566   
language   R   
version.string R version 2.4.0 (2006-10-03)
 1 %/% 0.1
[1] 9
 10 %/% 1
[1] 10
 

This effect led me into an trap when I tried to
classify a set of proportions based on the first
decimal place by integer dividing by 0.1.  Can someone
explain why this behavior occurs and give me an
insight into how to predict it?

Thanks,
-- Jeff

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] understanding integer divide (%/%)

2007-01-03 Thread ONKELINX, Thierry
This is due to the internal representation of 0.1, which is not exactly
0.1 but very close to it. If you want to do an integer divide, you
should only use integers to divide with.

Cheers,

Thierry




ir. Thierry Onkelinx

Instituut voor natuur- en bosonderzoek / Reseach Institute for Nature
and Forest

Cel biometrie, methodologie en kwaliteitszorg / Section biometrics,
methodology and quality assurance

Gaverstraat 4

9500 Geraardsbergen

Belgium

tel. + 32 54/436 185

[EMAIL PROTECTED]

www.inbo.be 

 

Do not put your faith in what statistics say until you have carefully
considered what they do not say.  ~William W. Watt

A statistical analysis, properly conducted, is a delicate dissection of
uncertainties, a surgery of suppositions. ~M.J.Moroney

-Oorspronkelijk bericht-
Van: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Namens Jeffrey Prisbrey
Verzonden: woensdag 3 januari 2007 14:21
Aan: r-help@stat.math.ethz.ch
Onderwerp: [R] understanding integer divide (%/%)

I am confused about why the following occurs:

 version
   _   
platform   i386-pc-mingw32 
arch   i386
os mingw32 
system i386, mingw32   
status 
major  2   
minor  4.0 
year   2006
month  10  
day03  
svn rev39566   
language   R   
version.string R version 2.4.0 (2006-10-03)
 1 %/% 0.1
[1] 9
 10 %/% 1
[1] 10
 

This effect led me into an trap when I tried to
classify a set of proportions based on the first
decimal place by integer dividing by 0.1.  Can someone
explain why this behavior occurs and give me an
insight into how to predict it?

Thanks,
-- Jeff

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] understanding integer divide (%/%)

2007-01-03 Thread rolf

Thierry Onkelinx wrote:

 If you want to do an integer divide, you should only use integers to
 divide with.

I think this should go into ``fortunes''.

cheers,

Rolf Turner
[EMAIL PROTECTED]

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] understanding integer divide (%/%)

2007-01-03 Thread Thomas Lumley
On Wed, 3 Jan 2007, ONKELINX, Thierry wrote:

 This is due to the internal representation of 0.1, which is not exactly
 0.1 but very close to it. If you want to do an integer divide, you
 should only use integers to divide with.

This must be more-or-less correct, but it is worth noting that
 0.1*10==1
[1] TRUE
 1/0.1==10
[1] TRUE
 1%/%0.1==10
[1] FALSE
so it isn't quite that simple.

Interestingly, the results seem to vary by system -- on a G4 Mac I get
1 %/% (1/x) == x for all x from 1 to 50

-thomas



 Cheers,

 Thierry

 
 

 ir. Thierry Onkelinx

 Instituut voor natuur- en bosonderzoek / Reseach Institute for Nature
 and Forest

 Cel biometrie, methodologie en kwaliteitszorg / Section biometrics,
 methodology and quality assurance

 Gaverstraat 4

 9500 Geraardsbergen

 Belgium

 tel. + 32 54/436 185

 [EMAIL PROTECTED]

 www.inbo.be



 Do not put your faith in what statistics say until you have carefully
 considered what they do not say.  ~William W. Watt

 A statistical analysis, properly conducted, is a delicate dissection of
 uncertainties, a surgery of suppositions. ~M.J.Moroney

 -Oorspronkelijk bericht-
 Van: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED] Namens Jeffrey Prisbrey
 Verzonden: woensdag 3 januari 2007 14:21
 Aan: r-help@stat.math.ethz.ch
 Onderwerp: [R] understanding integer divide (%/%)

 I am confused about why the following occurs:

 version
   _
 platform   i386-pc-mingw32
 arch   i386
 os mingw32
 system i386, mingw32
 status
 major  2
 minor  4.0
 year   2006
 month  10
 day03
 svn rev39566
 language   R
 version.string R version 2.4.0 (2006-10-03)
 1 %/% 0.1
 [1] 9
 10 %/% 1
 [1] 10


 This effect led me into an trap when I tried to
 classify a set of proportions based on the first
 decimal place by integer dividing by 0.1.  Can someone
 explain why this behavior occurs and give me an
 insight into how to predict it?

 Thanks,
 -- Jeff

 __
 R-help@stat.math.ethz.ch mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.

 __
 R-help@stat.math.ethz.ch mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


Thomas Lumley   Assoc. Professor, Biostatistics
[EMAIL PROTECTED]   University of Washington, Seattle

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] understanding integer divide (%/%)

2007-01-03 Thread Prof Brian Ripley
On Wed, 3 Jan 2007, Thomas Lumley wrote:

 On Wed, 3 Jan 2007, ONKELINX, Thierry wrote:

 This is due to the internal representation of 0.1, which is not exactly
 0.1 but very close to it. If you want to do an integer divide, you
 should only use integers to divide with.

 This must be more-or-less correct, but it is worth noting that
 0.1*10==1
 [1] TRUE
 1/0.1==10
 [1] TRUE
 1%/%0.1==10
 [1] FALSE
 so it isn't quite that simple.

 Interestingly, the results seem to vary by system -- on a G4 Mac I get
 1 %/% (1/x) == x for all x from 1 to 50

And even 1 %/% 0.1 == 10 on my Linux boxes.

Other things which are going on are the use of extra-precision registers 
(and potentially the system floor() function).

%/% (but not / or *) makes use of a round of iterative refinement.
It does

1/0.1 (10)
rounds down (10)
tmp = 1 - 0.1 *10 (slightly negative)
Oops, the answer must be 10 - 1.

This is needed for consistency since

 1 %% 0.1
[1] 0.1

on MinGW.

I think the Windows answer is correct, as 0.1 will be stored as 1/8 * 
53-bit binary fraction with leading 1, and according to package gmp

 as.bigq(0.1)
[1] 3602879701896397/36028797018963968

the denominator being 2^55.  So 1 - 10 * 0.1 is -2/2^55  0.

-- 
Brian D. Ripley,  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel:  +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UKFax:  +44 1865 272595

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.