C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比
為了驗證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 );
這兩個程序的結構基本是相同的不存在程序設計本身快慢的問題,每個程序運行60次,得到4組數據
| c++(不顯示中間過程ms) | 顯示過程ms | java(不顯示中間過程ms) | 顯示過程ms |
| 967 | 58228 | 844 | 1624 |
| 738 | 57315 | 549 | 1716 |
| 736 | 56691 | 929 | 1833 |
| 784 | 57116 | 862 | 1884 |
| 768 | 56679 | 866 | 1801 |
| 888 | 81498 | 922 | 1801 |
| 713 | 79003 | 860 | 1792 |
| 881 | 79574 | 833 | 1891 |
| 962 | 79737 | 851 | 1806 |
| 875 | 78760 | 916 | 1894 |
| 729 | 78189 | 786 | 1807 |
| 846 | 82891 | 735 | 1777 |
| 860 | 79148 | 785 | 1745 |
| 870 | 76569 | 878 | 1737 |
| 788 | 79128 | 754 | 1770 |
| 779 | 72847 | 828 | 1895 |
| 731 | 74039 | 852 | 1766 |
| 656 | 72004 | 919 | 1863 |
| 835 | 76723 | 858 | 1979 |
| 839 | 77570 | 857 | 1882 |
| 840 | 70929 | 924 | 1747 |
| 833 | 73277 | 952 | 1861 |
| 900 | 73976 | 659 | 1765 |
| 747 | 73794 | 783 | 1830 |
| 795 | 73472 | 813 | 1764 |
| 849 | 70584 | 769 | 1784 |
| 832 | 72319 | 834 | 1740 |
| 809 | 71475 | 892 | 1810 |
| 834 | 72823 | 818 | 1808 |
| 766 | 71847 | 834 | 1684 |
| 平均 | |||
| 815 | 72606.83333 | 832.0666667 | 1801.866667 |
| 標準差 | |||
| 70.69370552 | 7616.064198 | 82.16809329 | 71.20521204 |
| * | * | 0.020940695 | 40.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倍.
總結
以上是生活随笔為你收集整理的C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用反向传导做分子模拟:苯胺(C6H5NH
- 下一篇: C++,Java,Python,Fort