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万以内质数的实验数据对比相关推荐
- java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
问题背景&思路 如果需要计算100的阶乘,那应该怎么做? 方法1: for循环(默认,单线程) 方法2: 多线程,MapReduce思想 main线程开启多个子任务(个数=CPU核心数),放到 ...
- java存款只能存100_有100万存款,怎么样存银行才是最佳方法呢?
100万全部存一家银行肯定是没这么安全的,真正想做到绝对的安全还是建议你分两家银行存,这样才是真正的安全,下面进行详细分析. (1)100万从存款安全角度考虑 相信储户们都知道银行每年都是必须要购买存 ...
- JAVA计算斐波那契第100万项的最快算法排名汇总
最近在知乎上看到一个有趣的算法题:斐波那契数列的第一百万项怎么用 C++ 求? 看了几个大神的解答后,注意到很少有用JAVA代码去解决这个问题的,可能一方面java对这种超大数高精度的运算本身就不是特 ...
- java 100万 100 最大 选出_面试真题:求100万内的质数
一个头发稀少.穿着格子衬衣的中年男子走了进来,把手里拿的MAC放在桌子上,对我说:"我会用电脑记录面试过程,你不要介意啊". 我回答到:"没关系." 面试官:& ...
- java快排算法解读,java 快排的思路与算法
java 快排的思路与算法 有时候面试的时候的会问道Arrays.sort()是怎么实现的,我以前根本不知道是什么东西,最近点进去看了一下.直接吓傻, //看到这个时候还是比较淡定的,可怕的事情来了. ...
- java 快死了_如果Java快死了,那么它肯定看起来非常健康
java 快死了 Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人 ...
- 如果Java快死了,那么它肯定看起来非常健康
Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人们常常反复感叹 J ...
- 相对论或能解释为什么中微子速度比光快
相对论或能解释为什么中微子速度比光快 blackhat 发表于 2011年10月07日 14时00分 星期五 来自翘曲部门 两周前,CERN的物理学家宣布OPERA试验发现中微子传播速 ...
- java比go难学_为什么Go比Java快这么多?看完这个例子就懂
一,前言 本次小测试并不是试图说明Go是java的替代,Go lang和Java本就不是实现相同类型任务的语言 :Java是企业开发语言,而Go是系统编程语言.为什么Go比Java快这么多?看完这个例 ...
最新文章
- centos java yum_CentOS7 使用yum命令安装Java SDK
- 自动驾驶软件工程之目标检测以及传感器融合
- 【1863】畅通工程 (HDU)
- Linux的三种特殊权限
- boost::has_range_iterator相关的测试程序
- windows下配置opencv
- 参赛方案-主机托管、中小企业虚拟化应用
- vue-router 路由嵌套显示不出来_45. Vue路由vuerouter的基本使用
- 图表 stack属性_想快速了解MEAN Stack吗? 这是带有有用图表的文档。
- mysql 导出csv命令_MySQL 导出数据到csv文件的命令
- linux source多个文件夹,linux下source命令使用详解
- 阿里工程师手把手教你设计 B 端垂类营销中心!
- 新产品Wyn Enterprise 详解,立即预约公开课
- CentOS设置时间
- @RunWith报错/SpringJUnit4ClassRunner报错或无法使用
- xp系统安装ftp服务器,xp系统安装ftp服务器
- 【ManageEngine】OpManager 2022用户体验报告
- 计算机蓝屏代码0x0000007b,解决电脑蓝屏出现代码0x0000007b怎么解决
- 如何清除服务器错误文档,如何删除Windows错误报告文件
- 电脑鼠标不管用但键盘可以用怎么办