码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++ 移位计算代替乘除运算

时间:2017-07-01 23:22:42      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:c/c++   tip   div   测试   运行时   nat   while   c++   style   

测试移位和乘除的比较,发现移位比乘除运算快一个位数的速度,但是难点在于判断是否是2的幂次级的数,如果不是还得通过代码拆分到2的幂次+上分子的累和,然后通过移位得到2的次幂数这样;

下列代码只是简单的判断是幂级数则移位运算,不是则正常计算,不是完全都是移位算,(之后如果找到方法判断更快在更新)

C/C++:

 1 #include <iostream>
 2 
 3 
 4 
 5 uint64_t Multiply_Dived(uint64_t member, uint64_t denominator, char style)
 6 {
 7     //判断分母是否是2的次幂
 8     if (denominator & (denominator - 1))
 9     {
10         if (style == *)
11         {
12             while ((denominator >>= 1) != 1)
13             {
14                 member <<= 1;
15             }
16 
17         } else
18         {
19             while ((denominator >>= 1) != 1)
20             {
21                 member >>= 1;
22             }
23 
24         }
25         return member;
26     }
27 
28     if (style == *)
29     {
30         return member * denominator;
31     } else
32     {
33         return member / denominator;
34     }
35 }
36 
37 uint64_t Nomorl(uint64_t member, uint64_t denominator, char style)
38 {
39     if (style == *)
40     {
41         return member * denominator;
42     } else
43     {
44         return member / denominator;
45     }
46 }
47 
48 
49 int main()
50 {
51     std::clock_t start = 0, stop = 0;
52     start = clock();
53     for (uint64_t i = 0; i < 100000000; i++)
54     {
55         Multiply_Dived(1, 100, /);
56     }
57     stop = clock();
58     std::cout << "除移位运行时间: " << ((double) (stop - start) / CLOCKS_PER_SEC) << std::endl;
59 
60 
61 
62 
63     start = clock();
64     for (uint64_t i = 0; i < 100000000; i++)
65     {
66         Nomorl(1, 100, /);
67     }
68     stop = clock();
69     std::cout << "正常除运行时间: " << ((double) (stop - start) / CLOCKS_PER_SEC) << std::endl;
70 
71     return 0;
72 }

 

C/C++ 移位计算代替乘除运算

标签:c/c++   tip   div   测试   运行时   nat   while   c++   style   

原文地址:http://www.cnblogs.com/xuaidongstdudyrecording/p/7103733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!