【问题标题】:Fastest programming language for computing large numbers?计算大数的最快编程语言?
【发布时间】:2011-09-30 22:08:04
【问题描述】:

如果我想计算数以亿计的数字(正整数),哪种编程语言最适合?

目前我正在使用 python 并且脚本正在运行并且它很容易编码,但我担心它的速度。

我对组装一无所知,所以虽然它可能是最快的,但我宁愿不使用它。 C 是这里的最佳选择吗?

我必须使用的具体操作是 *、-、% (mod)、求幂、相等测试(if 语句)以及基本循环和某种输出功能(例如控制台输出)。

非常感谢。

【问题讨论】:

  • 你能提供更多的上下文吗?你想做什么?你在什么操作系统上?您在寻找什么样的速度
  • 啊,我很抱歉没有指定操作系统。目前我正在使用 Windows 7,至于我想要做什么,我只是通过一些算法来运行一些非常大的数字以获得乐趣 =D
  • 计算数亿位数的数字 听起来有点棘手。加法,减法和模......也许。但是乘法?这将是,无论是什么编程语言...
  • 您可能想尝试使用 C 编写的 GMP 库,它可以满足您的需求,但您最终不会创建自己的实现:gmplib.org
  • 把时间花在算法改进上,而不是语言跳跃上。

标签: math numbers largenumber


【解决方案1】:

您可以将GMP 与普通 C 一起使用,但请注意,许多动态语言将其用于任意精度数,python 也是如此。使用 C 可能不会获得太多收益。

【讨论】:

  • 您能详细说明一下这部分吗?这种计算可能会运行数天或数周,因此我可以获得的任何速度提升都不容忽视。您认为 python 仅用纯 C 语言编写它的开销有多大?
  • 取决于你想要做什么......如果 90% 的时间花在 GMP 和 10% 的 Python 上,那么你不会获得太多......如果有很多控制结构,操作容器等,那么它可能是值得的。
  • @Mark Byers:嗯,不……有数以亿计的数字,这绝对是非常不切实际的。 python 只是这些计算的一个薄包装器。
  • @Mark - 通常我不会怀疑,但在这种情况下,每个基本数学运算的 GMP 代码将花费大量时间 - 例如将两个数亿位数相乘将需要相当长的时间。相比之下,花在 Python 编码算法上的时间很容易变得微不足道。
  • @yi_H: 嗯,不。Python 使用它自己的实现来处理任意精度的数字。 gmpy 模块 [code.google.com/p/gmpy] 为 GMP 库提供了一个包装器。对于数百万位数的数字,gmpy 要快得多。快速测试:在快速 64 位机器上,将一百万位数字提高到 100 次方大约需要 4 秒。将两个 1 亿位数字相乘大约需要 3 秒。使用 Python 的开销极低。免责声明:我维护 gmpy。
【解决方案2】:

带有 C/C++ 的 GMP 库。

http://gmplib.org/

【讨论】:

    【解决方案3】:

    这是您阅读的资源。这反驳了 C 最快的论点,除非您使用 C99 限制功能。如果有什么 C++ 比 C 快的话。当两个独立但连续的操作“读取”引用相同的内存位置时,这真的归结为编译器的理解。这允许编译器重新排序操作以进行优化。看来 Fortran 最擅长这样做。

    http://en.wikipedia.org/wiki/Pointer_aliasing

    您还可以在此处看到 Fortran 在 Mandelbrot 例程上击败了 C++。但在文本操作方面,C++ 似乎是顶级的。

    http://shootout.alioth.debian.org/u32/fortran.php

    【讨论】:

    • 这应该是评论,而不是答案。
    • 所有该链接显示的是,编写不佳的 C++ 代码在使用 特定 编译器时表现不佳,这并不意味着 C++ 或 Fortran 天生就比另一个更快。
    • @MooingDuck 和 dreamlax:我猜你们两个可能更了解编译器,所以我愿意为讨论做出贡献。编程只不过是我的一种爱好......,我花了太多时间的爱好。
    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2010-11-29
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多