C++,Java,Python,Fortran到底哪个更快?

在《C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比》这篇文中比较了C++和Java的速度,现在接着用同样的办法通过算1000000以内的质数来比较python和fortran的速度。


Python代码

import time

import datetime

t =time.time()  

#print(int(round(t * 1000)))

i=2

j=2

for i inrange(2,1000000):

   for j in range(2,(int(i/j)+2)    ):

     #print(i,"*",j,(int(i/j)+1)        )

     

      if(i%j==0):

         #print(i,j,"             **")

         break

  # if(j >int (i/j)):

         #print(i)

t1 =time.time()     

print(int(round(t1 * 1000))-int(round(t * 1000)) ,"********* " )

 

#########################################

!!!!!!!!!!!!!!!!!!!!!!!!!

fortran代码

program main

 

    implicit none

    integer::i,j

 Real :: r1 = 0.0

 Real :: r2 = 0.0

 Real :: r3 = 0.0

 Real :: r4 = 0.0


 Real :: ra1 = 0.0

 Real :: ra2 = 0.0

 Real :: ra3 = 0.0

 Real :: ra4 = 0.0

 

character(8)::date

character(10)::time

character(5)::zone

integer,dimension(8)::values

 

character(8)::datea

character(10)::timea

character(5)::zonea

integer,dimension(8)::valuesa

 

!using keywordarguments

calldate_and_time(date,time,zone,values)

calldate_and_time(DATE=date,ZONE=zone)

calldate_and_time(TIME=time)

calldate_and_time(VALUES=values)

 

  print '(a,2x,a,2x,a)',date,time,zone

  print '(8i5))',values

 

    outer: do i=2,1000000

         inner:do j=2, i/j     

 

                   !print "(3i5)",  i/j ,i,j

                  if( j*(i/j)==i)then

                            exit inner               

                                  end if

          end do  inner

            if(j > (i/j)) then

                print "(3i10)",i

                      endif

    end do outer

 

calldate_and_time(datea,timea,zonea,valuesa)

calldate_and_time(DATE=datea,ZONE=zonea)

calldate_and_time(TIME=timea)

calldate_and_time(VALUES=valuesa)

 

           Read(time(1:2) , * ) r1

           Read( time(3:4) , * ) r2

           Read( time(5:6) , * ) r3

           Read( time(8:10) , * ) r4

       Read( timea(1:2) , * ) ra1

       Read( timea(3:4) , * ) ra2

       Read( timea(5:6) , * ) ra3

       Read( timea(8:10) , * ) ra4

 

  print '(a,2x,a,2x,a)',datea,timea,zonea

  !print '(8i5)',valuesa

 

  print '(f11.3)', (ra1*60*60*1000+ra2*60*1000+ra3*1000+ra4 )-(r1*60*60*1000+ r2*60*1000+r3*1000+r4)

! print'(f11.3)', ra1,ra2,ra3,ra4

 

end program

 

运算过程基本是一样的,因为python的冒号后面必须有东西所以把# if(j >int (i/j)):

         #print(i) 这两句话都注释掉了,实际上python的程序比其他的程序还少了一步,fortran的时间计算因为不能直接的得到ms的时间还要转化一下,这一步慢了一点。


c++(不显示中间过程ms)显示过程msjava(不显示中间过程ms)显示过程mspython(不显示中间过程ms)fortran(不显示中间过程ms)显示过程ms
9675822884416244625593100717109126
7385731554917164492283102039109546
7365669192918335211503101634108775
784571168621884*100651122592
768566798661801*101487121870
888814989221801*101261121646
713790038601792*101379120226
881795748331891*100606110631
962797378511806*106303108145
875787609161894*94476108237
729781897861807 
846828917351777 
860791487851745
870765698781737
788791287541770
779728478281895
731740398521766
656720049191863
835767238581979 
839775708571882
840709299241747 
833732779521861
900739766591765
747737947831830
795734728131764
849705847691784
832723198341740
809714758921810
834728238181808
766718478341684
平均
81572606.833832.066671801.86674776459.7101055.3114079.4

因为速度差距过于悬殊fortran只算了10次,python算了3次,python也没有测量控制台该显示所有中间过程的时间


得到数据在控制台不显示中间过程的情况下

C++     java     fortran        python

815     832     101055     4776459

1         1.02     123          5860

也就是C++的计算速度是java的1.02倍,是fortran的123倍,是python的5860倍


控制台显示中间过程的情况的速度比较

Java      c++          fortran      python

1801    72606   114079       4776459

1             40            63                2652

Java控制台显示速度是c++的40倍,是fortran的63倍,至少是python的2652倍            

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑榆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值