FAQ
I ran 100 repetitions of the 3 multiplications that Robin had compared.
Here are the summaries of system times (I only took the first component of
system.time) that I obtained. It is clear that f1() is nearly twice as slow
as f2() which is slightly slower (not 3 times slower as claimed by Robin)
than f3(). So, I don't think that there is much to choose between the
"cleverer" way and the most obvious way to compute integer powers.
summary(f1time)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.060 0.170 0.210 0.199 0.230 0.300
summary(f2time)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.060 0.100 0.110 0.128 0.170 0.190
summary(f3time)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000 0.0300 0.0950 0.0779 0.1100 0.1300

Ravi.

--------------------------------------------------------------------------
Assistant Professor, The Center on Aging and Health
Division of Geriatric Medicine and Gerontology
Johns Hopkins University
Ph: (410) 502-2619
Fax: (410) 614-9625
--------------------------------------------------------------------------
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-
bounces at stat.math.ethz.ch] On Behalf Of Tuszynski, Jaroslaw W.
Sent: Wednesday, June 29, 2005 8:25 AM
To: 'Robin Hankin'; r-help
Subject: Re: [R] x*x*x*... vs x^n

I tried your code and got different results:
system.time(ignore <- f1(a))
[1] 0.83 0.09 1.08 NA NA
system.time(ignore <- f2(a))
[1] 0.38 0.01 0.41 NA NA
system.time(ignore <- f3(a))
[1] 0.32 0.04 0.43 NA NA

So I tried it again but with a loop and got:
for(i in 1:10) cat(system.time(ignore <- f2(a)), "\n")
0.36 0.04 0.44 NA NA
0.32 0.01 0.34 NA NA
0.28 0.03 0.32 NA NA
0.29 0.03 0.35 NA NA
0.3 0.02 0.32 NA NA
0.28 0.03 0.32 NA NA
0.3 0.02 0.32 NA NA
0.29 0.02 0.34 NA NA
0.23 0.03 0.32 NA NA
0.42 0 0.45 NA NA
for(i in 1:10) cat(system.time(ignore <- f3(a)), "\n")
0.19 0.04 0.25 NA NA
0.17 0.04 0.25 NA NA
0.21 0.02 0.25 NA NA
0.21 0.02 0.23 NA NA
0.18 0.04 0.23 NA NA
0.18 0.05 0.23 NA NA
0.18 0.04 0.25 NA NA
0.17 0.06 0.23 NA NA
0.2 0.02 0.23 NA NA
0.14 0.06 0.25 NA NA

It seems to me that f3 is 50% slower than f2 not 300%.

My System is:
- R version: R 2.1.1
- Operating System: Win XP
- Compiler: mingw32-gcc-3.4.2

Jarek
====================================================\=======

Jarek Tuszynski, PhD. o / \
Science Applications International Corporation <\__,|
(703) 676-4192 "> \
Jaroslaw.W.Tuszynski at saic.com ` \

-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Robin Hankin
Sent: Wednesday, June 29, 2005 7:32 AM
To: r-help
Subject: [R] x*x*x*... vs x^n

Hi

I have been wondering if there one can speed up calculating small powers
of
numbers such as x^8 using multiplication.

In addition, one can be a bit clever and calculate x^8 using only 3
multiplies.

look at this:

f1 <- function(x){x*x*x*x*x*x*x*x}
f2 <- function(x){x^8}
f3 <- function(x){x2 <- x*x;x4 <- x2*x2;return(x4*x4)}
[so f1() and f2() and f3() are algebraically identical]

a <- rnorm(1000000)
system.time(ignore <- f1(a))
[1] 0.50 0.17 2.88 0.00 0.00
system.time(ignore <- f2(a))
[1] 0.31 0.03 1.40 0.00 0.00
system.time(ignore <- f3(a))
[1] 0.10 0.07 0.18 0.00 0.00

[these figures show little variance from trial to trial]

I was expecting f2() and f3() to be about the same.
I was not expecting a factor of 3 there!

--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton European Way, Southampton SO14
3ZH, UK
tel 023-8059-7743

______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
http://www.R-project.org/posting-guide.html

______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
guide.html

## Related Discussions

 view thread | post posts ‹ prev | 9 of 12 | next ›
Discussion Overview
 group r-help categories r posted Jun 29, '05 at 11:32a active Jun 29, '05 at 6:55p posts 12 users 7 website r-project.org irc #r

### 7 users in discussion

Content

People

Support

Translate

site design / logo © 2018 Grokbase