【问题标题】:Emulating numerical operations in software在软件中模拟数值运算
【发布时间】:2011-05-02 14:32:54
【问题描述】:

我们在程序中进行的数值运算受到语言为给定数据类型(或者硬件支持)指定的字节数的限制。假设我可以使用整数来计算我的薪水(即使“短”也足以满足一年的收入!!!;))但不能对比尔·盖茨的财富做同样的事情。因此,我们会选择 long long 之类的东西。但是我们不是仍然受制于给我们的比特数吗?

那么,如果我在软件中模拟数值运算呢?说一个抽象的类,可以对具有 1000 位数字的数字进行数字运算...... 当然它会太慢,但我不太担心复杂性,而是更多地关注可计算性......

也许我可以用它在一个月内计算 PI 到 1000 位的准确度,或者在几年内计算出梅森素数并带回家 10 万美元;)

所以现在我的问题是, 1)是否已经有任何这样的库来做这种事情(在 C/C++ 中)。 2)如果我要实施一个,你对我有什么建议吗? (+, -, *, /, %, > 操作我猜应该足够了)


PS:

  1. 我是 C/C++ 程序员。

  2. 这个限制从我学生时代就开始困扰我。

【问题讨论】:

    标签: numeric computability


    【解决方案1】:

    此类数据类型称为任意精度数。在 Java 中,有类 BigDecimalBigInteger 处理数字级别的基本操作(+、-、*、/)。它们没有“内置”大小限制。它们实际上并没有那么慢,并且被用于许多现实世界的领域。

    C/C++ 没有内置它,但那里有很多库。在此处查看列表: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries

    【讨论】:

    • 实际上,任意精度的数字几乎是大多数语言中整数的标准类型。像 C、C++、Java、C#、Objective-C 这样甚至不能正确添加两个整数的语言确实是个例外。
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多