算 1 到 10 亿的所有自然数的和,c 用时 4.4's, java 用时 3.8's,python 用时 302.9's,已吓尿,求解释

2014-10-18 16:37:36 +08:00
 MonkLuf
算1到10亿的所有自然数的和,c用时4.4's, java用时3.8's,python用时302.9's。

吓尿!!!

java居然这么快,居然比c都快!!python居然慢了将近100倍也太夸张了吧!!这个速度突然毁掉了我的世界观。。。。。

求懂java的人带详细理由的告诉我为什么java会这么快,python为何慢这么多(慢得太离谱了。。。)
12977 次点击
所在节点    问与答
106 条回复
geew
2014-10-19 13:20:10 +08:00
我能说你们好无聊么
darkmatter
2014-10-19 13:36:02 +08:00
n(n +1)/2
ChiangDi
2014-10-19 13:41:30 +08:00
Haskell 啊哈哈哈哈

dingyaguang117
2014-10-19 13:47:29 +08:00
卤煮,你这个不科学,只有python加出来的的是真正的和,其他的32位早就溢出了吧
msg7086
2014-10-19 13:51:18 +08:00
tywtyw2002
2014-10-19 14:07:04 +08:00
我们比较下 gcc clang 还有icc的速度吧。。。。。然后做一下多核的曲线,这就是一篇paper了。。
jacob
2014-10-19 15:03:31 +08:00
ruby 的存在感这么低吗

----------
def sum
i,s=0,0
start=Time.now
while i<1000000000
i+=1
s+=i
end
puts "sum of while:#{s},time:#{Time.now-start}"
end


sum()

def sum_of_range
s=0
start=Time.now
digi=1..1000000000
digi.each do |d|
s+=d
end
puts "sum of range:#{s},time:#{Time.now-start}"
end

sum_of_range()
------------------------


sum of while:500000000500000000,time:255.076978
sum of range:500000000500000000,time:343.893392
lushl9301
2014-10-19 15:20:31 +08:00
@takato 酱紫。。。不是i++多分配一个临时内存储存一下的么。。。
ant_sz
2014-10-19 19:15:11 +08:00
@MonkLuf

你看了评论竟然还没发现么。不是Python性能低,是你不会写。

像这样的垃圾帖子每隔一段时间都要在v2ex上刷一回,为何还会有人不断地刷呢。
lightening
2014-10-19 20:20:46 +08:00
@MonkLuf Java 效率低本来就是一种误解。我朋友做的一些证券交易系统的内核用 Java 写,速度和 C 根本不相上下。
AWSAM
2014-10-19 20:26:27 +08:00
@jacob ruby 不应该这么写么

time ruby -e 'puts (1..10e8).inject :+ '

------------------------------
500000000500000000
ruby -e 'puts (1..10e8).inject :+ ' 155.01s user 0.89s system 98% cpu 2:38.48 total
gihnius
2014-10-19 20:38:52 +08:00
@MonkLuf
@lightening
lisp 效率低也是一种误解。看上面的例子,速度和 C 不相上下。:)
RelativeLayout
2014-10-19 20:57:16 +08:00
我这儿排序是这样的:

Java 1.05s
Node 1.38s
C 2.93s
Python 100+s

Node
https://gist.github.com/daimajia/dd7bf30f498300fa31e0
aWangami
2014-10-19 21:15:22 +08:00
skybr
2014-10-19 21:16:05 +08:00
js快归快, 答案是错的.
jacob
2014-10-19 21:40:13 +08:00
@AWSAM 看不懂,也不知道怎么运行
RelativeLayout
2014-10-19 21:50:32 +08:00
@skybr 确实! Node的计算结果是错误的!
RelativeLayout
2014-10-19 21:53:24 +08:00
@skybr 找到错误原因了, JavaScript最大的数只能到
9007199254740992
而答案是:
500000000500000000

http://stackoverflow.com/a/307200
barbery
2014-10-19 22:08:50 +08:00
擦,这帖子竟然还没沉。。。好吧,讨论得那么激烈,怎么能少得了golang版本的呢

https://gist.github.com/Barbery/9a5d2caf0915f370acdd.js
barbery
2014-10-19 22:09:37 +08:00
golang版本的只要0.82秒哦,亲!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/139818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX