【问题标题】:How to represent a number greater than the maximum value如何表示大于最大值的数字
【发布时间】:2010-11-23 06:17:27
【问题描述】:

如何表示超过任何特定数据类型(int、long)的最大值的值?

我正在考虑使用另一个存储空间来充当柜台。一旦超过最大值,计数器就会更新为 ,变量已超过“x”次限制。还有其他有效的方法吗?

我们如何显示确切的值?

P.S : 只是一个假设性问题。

【问题讨论】:

    标签: programming-languages int long-integer maximize


    【解决方案1】:

    一种方法是为此实际制定出其中一个值。

    例如,如果您有一个可以表示 0 到 65535(含)值的 16 位整数类型,请将范围缩小到 0 到 65534,并使用 65535 来表示值“too darned big”。

    您必须小心控制操作,以免它们在正常的事件过程中产生该值,但如果您的语言提供类功能,那将相当容易。

    或者,您可以使用下一个最大的数据类型,例如long 用于intlong long 用于long,并使用额外的范围来存储信息。

    而且,如果您需要更多,您可以编写一个 bignum 库(或使用已经存在的库),这样就不会对您的数字进行人为限制。

    【讨论】:

      【解决方案2】:

      我不确定,但我认为您必须创建自己的数据类型(或类)。以前已经这样做过。事实上,一些语言有自己的实现:

      http://groups.csail.mit.edu/mac/users/adams/BigInt/BigInt.html

      【讨论】:

        【解决方案3】:

        考虑一个标准的 IEEE-754 浮点数和“Infinity”位模式。可以在固定的 int/long 中保留类似的位模式来表示“无穷大”。但是,CPU 不会像大多数 FPU 那样帮助您处理数学/溢出状态。

        像 Ruby 或 elisp 等一些语言已经在整数中“保留”位(例如,Ruby 中的 fixnum 仅限于 [-2^29,2^29-1],因为 2 位用于对象管理)。使用特定的位模式与位只会删除一个潜在值。

        如果您谈论的是高级语言,例如 C#,那么定义自定义类型很容易:

        struct IntWithStuff {
           int value;
           bool isTooBig;
        }
        

        您还可以重载各种运算符并实现一些(显式)强制转换,但我离题了...

        【讨论】:

          猜你喜欢
          • 2018-07-13
          • 1970-01-01
          • 2021-12-10
          • 1970-01-01
          • 2014-12-30
          • 2016-04-07
          • 1970-01-01
          • 2021-07-10
          • 2016-12-01
          相关资源
          最近更新 更多