刚才去C#地盘拍了一块砖。呵呵。
本来从不去看C#,但是CSDN推荐了的,就点进去看看了。
结果发现最烂的没有经过优化的Java程序,比优化得很好的C#还要快3倍。
如果运行相同的优化算法,岂不是要快10倍,一个数量级?C#大数的阶乘
本来从不去看C#,但是CSDN推荐了的,就点进去看看了。
结果发现最烂的没有经过优化的Java程序,比优化得很好的C#还要快3倍。
如果运行相同的优化算法,岂不是要快10倍,一个数量级?C#大数的阶乘
嘿嘿。那天冬子好像给过一个用String实现的,应该就可以用。
想要提升速度就只有改算法.你拿不同算法的实现去进行效率比较,有意义?
况且你用的是别人实现的BigInteger类."如果运行相同的优化算法,岂不是要快10倍,一个数量级?"
你试试,按照C#那个帖子的算法,你用JAVA实现看看,能不能提高一个数量级.
你怎么知道我没弄清楚BigInteger?胡说八道。同样算法,汇编和basic能比速度吗?编译型语言和解释型语言,在一个数量级内?搞明白了数量级再回来开牙。那快的实现去比别人慢的实现,然后说别人慢,当然是不对的。
但是你开牙前看清楚,我用BigInteger来做,是偷了懒的。BigInteger功能强大,但是效率并不快。我的程序里面,big = big.multiply(),10000次重新申请空间的做法,比C#的实现要慢的多。
所以我才说,我这个粗糙的没有优化过的算法,都比C#那个快3倍。有时间我会试的。但是那个帖子,连n!是多少位都不会判断,我实在不知道说什么好。
你是想说29章的乘法电路?不是动不动就说C#烂,俺第一次说,就是因为那个帖子,然后稍微比较了一下。
以前说MFC烂,那是我经常说的,10年前,抓了微软内部的几个bug,向西雅图报告过,他们态度非常好,但是那些bug实在太低级了,后来学了Java就放弃VC++了。
后来公司有机会和微软里面玩COM内核的人打交道(不是俺,是另外一个牛人),发现原来微软的人自己不懂怎么用COM,为此工期差点延期,客户本来已经准备好文件去法院告微软了,后来那个牛人因为早就发现问题,公司高层也早做了准备,第一时间把微软的提案全部推翻重做,终于赶上客户的工期。为此,微软还给我曾工作过的这个公司奖状。
所以,我不是动不动就说,是有确凿理由的。
您说的没错,看看发展情况就知道利弊了。http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html看看走向就知道,这4,5年来,C#的确从0.X%上升到4.X%。
但是,同时VB也从8.X%下降到4.X%,也就是说C#只不过从自己的VB那里攒到点人品而已。两者加起来不到10%。
而Java从2X%降到1X%,看得出是因为PHP,Python,Ruby的迅猛发展,被抢掉了很多份额。
未来会怎么样不好说,特别是sun被oracle收购以后,java走向还是不明朗。
但是不管怎么样C#要成为对手,可能还太早。
微软的C#应该是参考了java。
恩。就是这个,我早上就把用这个斯特林公式推出来的阶乘长度的java代码贴在C#坛子里了。
int d = (int) (((1.0 / 2.0 * Math.log(2 * 3.1416) + n * Math.log(n) - n) / Math.log(10)) + Math.log10(n)) + 1;
我从头到尾就没有鄙视过C#呀,俺对C#不熟,怎么会去鄙视它?
只不过喜欢C#的人自以为被鄙视了而已。
我也没有说过Java有绝对的优势。就执行效率而言class文件在jvm运行,怎么也比不上可执行程序直接在OS上执行。
我的帖子只是想说:
1,就计算n!的那个例子而言,C#慢
2,既然要深入研究大数的n!并就结其速度,那么至少估算n!的长度的算法要准确点吧?
俺的本意是,经过优化的N!算法,和考虑到通用性,所以效率并不高的BigInteger相比,差了很多,所以俺的结论是C#慢。这里不同意火龙果的说法,BigInteger的确经过了10多年的改造,非常完善。但是我的程序却非常粗糙,根本没考虑过为了阶乘进行优化。所以其效率真的很慢,每次new一个object就要花费很多时间。然后,俺的确不熟C#,所以自己没有资格鄙视C#。但是的确是有人认为自己被鄙视的。
比方说我就不知道C#里面有没有类似BigInteger的类,有的话,用C#的BigInteger实现的阶乘和自行实现的阶乘效率哪个更快?如果用自行实现的更快的话(我相信他的程序是快的),说明C#本身是慢的。“做任何事情都应该实事求是,而不轻浮。还有就是适当的肚量,敢于接受其它事物,相信这些话对你今后一生都是有帮助的。”这话我原文奉还。在我看来,聊技术问题的时候,说什么“轻浮”,“肚量”,“人生”的人
恰恰是不“实事求是”,扯东扯西。关于“已经写出更精确的方法”,本来就在火龙果给出近似的斯特林公式值钱,我已经把源码给出了。
再用斯特林公式去推一下就没有任何意义了。倒是不妨用更精确的那个不是“约等于”的那个公式试试。