如何在编程中表示无穷大

时间:2013-11-08 13:06:25

标签: algorithm infinity

如何在C ++,Java等中表示-infinity

在我的练习中,我需要使用-infinity初始化变量,以显示它是一个非常小的数字。

在计算-infinity - 3-infinity + 5时,它也会产生-infinity

我尝试使用INT_MIN初始化它,但是当我计算INT_MIN - 1时,我得到了上限,因此我无法进行类似的测试:if(value < INT_MIN) var = INT_MIN;

那我怎么能这样做呢?

6 个答案:

答案 0 :(得分:4)

你不能用整数表示无穷大[1]。但是,您可以使用浮点数,即floatdouble

您在标签中列出了几种语言,并且它们都有不同的获取无穷大值的方法(例如,C99在INFINITY中定义math.h,如果无限可用于该实现,而Java有POSITIVE_INFINITYNEGATIVE_INFINITY类中的FloatDouble。通常(但不总是)可以通过将浮点数除以零来获得无穷大值。

[1]除了你可以用你检测为无穷大的特殊值的代码包装你的整数上的每个算术运算的可能性。我不推荐这个。

答案 1 :(得分:2)

您可以将-Infinity作为浮点文字(至少在Java中):

double negInf = Double.NEGATIVE_INFINITY;

已实施according to the IEEE754 floating point spec

答案 2 :(得分:1)

如果有可能不存在数字,而不是从其域中选择一个数字来表示“不存在”,我会选择一个类型,其中包含我关注的每个整数,以及“不存在”状态

optional的一个(延期的)C ++ 1y提案就是一个例子:optional<int>要么不存在,要么是整数。要访问整数,首先询问它是否存在,如果是“取消引用”,则可以选择获取它。

制作传染性选项:在几乎任何二元操作中,如果没有任何一个值,就会感染结果,应该是这个想法的简单扩展。

答案 3 :(得分:0)

如果您想表示可以使用的最小值,例如

表示整数

int a = Integer.MIN_VALUE;

和浮点数,双精度等采用每个对象包装器最小值

答案 4 :(得分:0)

您可以将数字定义为-infinite,当从数字中添加或减去某些内容时,您首先检查该变量是否等于该伪数。如果是这样,你就可以保持原样。

但您可能会发现库函数为您提供了实现的功能,例如Java中的Double或c ++中的std。

答案 5 :(得分:0)

你不能真正代表无限值,因为你必须将它存储在有限数量的位中。某些类型中存在无穷大的符号版本(例如,在典型的浮点规范中),但严格意义上它不会表现得与无穷大完全相同。您需要在程序中包含一些额外的逻辑来模拟您需要的行为。