だれが一番はやいでしょうか?
typedef std::complex<double> COMPLEX; COMPLEX plus_1(COMPLEX a, COMPLEX b) { return a + b; } COMPLEX plus_2(const COMPLEX& a, const COMPLEX& b) { return a + b; } COMPLEX plus_2_1(COMPLEX& a, COMPLEX& b) { return a + b; } COMPLEX plus_2_2(const COMPLEX& a, const COMPLEX& b, const COMPLEX& c, const COMPLEX& d) { return a + b; } void plus_3(COMPLEX a, COMPLEX b, COMPLEX& c) { c = a + b; } void plus_4(const COMPLEX& a, const COMPLEX& b, COMPLEX& c) { c = a + b; } int main(int argc, char *argv[]) { const int count = 100000000; { timer t; COMPLEX a(1,1); COMPLEX b(1,1); COMPLEX c(0,0); for( int i=0 ; i<count ; ++i ) { c = plus_???(a, b); a = c; } printf("plus_??? c=(%f,%f) time=%d [ms]\n", c.real(), c.imag(), t.span()); } }
plus_1 c=(100000001.000000,100000001.000000) time=1830 [ms] plus_2 c=(100000001.000000,100000001.000000) time=1515 [ms] plus_2_1 c=(100000001.000000,100000001.000000) time=1411 [ms] plus_2_2 c=(100000001.000000,100000001.000000) time=1460 [ms] plus_3 c=(100000001.000000,100000001.000000) time=2174 [ms] plus_4 c=(100000001.000000,100000001.000000) time=1847 [ms]
plus_2 が1番速そうな気がしたのに。。
plus_2_1が速いなんて!