ホーム » スタッフ » 斉藤徹 » pow(2,i)の速度

2018年3月
« 2月   4月 »
 123
45678910
11121314151617
18192021222324
25262728293031

最近の投稿(電子情報)

アーカイブ

カテゴリー

pow(2,i)の速度

例年、2進数演算の課題を出すと、2i の処理を、pow(2,i) で書く学生さんがいる。

しかしながら、pow() は、double 型なので遅い。これは、2進数の特徴を踏まえれば、1 << i で書けば良い。
試しに、実際の処理速度を測ってみた。

#include <stdio.h>
#include <math.h>

long long int mask( ) {
  long long int m ;
  for( int j = 0 ; j < 10000000 ; j++ ) {
    m = 0 ;
    for( int i = 0 ; i < 60 ; i++ ) {
      m += pow( 2 , i ) ;
      // m |= (1 << i) ;
    }
  }
  return m ;
}

int main() {
  long long int x = mask() ;
  return 0 ;
}
m |= (1 << i) ; ---------  1.296 [sec]
m += pow( 2 , i ) ; ----- 44.956 [sec]
                          40倍の遅さ