您的位置:首页 > 编程语言 > C语言/C++

C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比

2018-01-23 15:01 295 查看
为了验证C++到底比Java快多少分别用两种语言计算100万以内的质数,并记录时间

C++的程序是

clock_t start,ends;

start=clock();

 int i, j;

    for(i=2;i<1000000; i++) {

        for(j=2;j <= (i/j); j++) {

            if(!(i%j)){

                break;

            }

        }

        if(j> (i/j)) {

         //  cout << i << " 是质数\n";

        } 

    }

ends=clock();

cout<<(ends-start)*1000/CLOCKS_PER_SEC<<endl;

 

Java的程序是

   long
sysDate1 =System.currentTimeMillis();

      int
i, j;

       for(i=2;i<1000000;i++) {

          for(j=2;j<= (i/j);j++)
{

              if((i%j==0))

              {

                   break;
 

              }

          }

          if(j >(i/j)) {

            //  System.out.println(i+"是质数\\n");

          }

       }

      

       long
sysDate2 =System.currentTimeMillis();

     System.out.println(sysDate2-sysDate1 );

这两个
4000
程序的结构基本是相同的不存在程序设计本身快慢的问题,每个程序运行60次,得到4组数据

c++(不显示中间过程ms)显示过程msjava(不显示中间过程ms)显示过程ms
967582288441624
738573155491716
736566919291833
784571168621884
768566798661801
888814989221801
713790038601792
881795748331891
962797378511806
875787609161894
729781897861807
846828917351777
860791487851745
870765698781737
788791287541770
779728478281895
731740398521766
656720049191863
835767238581979
839775708571882
840709299241747
833732779521861
900739766591765
747737947831830
795734728131764
849705847691784
832723198341740
809714758921810
834728238181808
766718478341684
平均
81572606.83333832.06666671801.866667
标准差
70.693705527616.06419882.1680932971.20521204
**0.02094069540.29534187
可以看到在不显示中间过程

//   cout << i << " 是质数\n";

//  System.out.println(i+"是质数\\n");

的情况下C++30次平均用时815ms,Java用时832ms,C++比Java快2.1%。

但是如果将中间运算过程打印到控制台并显示

 cout << i << " 是质数\n";

System.out.println(i+"是质数\\n");

C++平均用时72606ms,Java用时1801ms,Java的控制台显示速度是C++的40倍。

所以运算量很大希望看看中间的运算过程看看是没算完还是死机了,显示样本的比例就非常重要,2%的速度优势很容易就被40倍的控制台显示速度给消耗掉了。

比如这道题很容易用方程算出

815+71791*x/78498=832+969*x/78498

X=18,也就是说每4361(78498/18)个显示1个的比例C++才可能比Java快

只要x>18个Java的速度就比C++快。

很容易得到方程Java/C++的速度比,x是显示的样本数量

 

(63975870+71791*x)/(65310336+969*x)=y



当样本数量x<=18时C++>Java



当样本数量x>=18时C++<Java

所以对这道题当不显示中间过程的情况下C++比Java快2.1%,如果需要显示过程当抽样总数量超过18个的时候Java比C++快,如果需要显示所有的中间过程Java比C++快40倍.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: