我如何-infinity
用 C++、Java 等表示?
在我的练习中,我需要初始化一个变量-infinity
以表明它是一个非常小的数字。
计算的时候-infinity - 3
,还是-infinity + 5
应该也有结果-infinity
。
我尝试用 初始化它INT_MIN
,但是当我计算时INT_MIN - 1
我得到了上限,所以我无法进行如下测试:if(value < INT_MIN) var = INT_MIN;
那么我该怎么做呢?
您不能用整数 [1] 表示无穷大。但是,您可以使用浮点数执行此操作,即float
和double
。
您在标签中列出了几种语言,它们都有不同的获取无穷大值的方法(例如,C99 定义INFINITY
in math.h
,如果该实现可以使用无穷大,而 Java 有POSITIVE_INFINITY
and NEGATIVE_INFINITY
inFloat
和Double
类)。通常(但不总是)可以通过将浮点数除以零来获得无穷大值。
[1] 除了您可以使用检查您视为无穷大的特殊值的代码来包装整数上的每个算术运算的可能性之外。我不会推荐这个。
如果有一个数字不存在的可能性,而不是从其域中选择一个数字来表示“不存在”,我会选择一种类型,其中包含我关心的每个整数和“不存在”状态。
一个(延迟的)C++1y 提案optional
就是一个例子:anoptional<int>
要么不存在,要么是一个整数。要访问整数,首先要询问它是否存在,如果存在,则“取消引用”获取它的可选项。
制作具有传染性的可选选项:在几乎任何二元运算中,如果其中一个值不存在,就会感染结果,这应该是这个想法的一个简单扩展。
例如,如果要表示可以使用的最小值
对于整数
int a = Integer.MIN_VALUE;
并且浮点数、双精度数等获取每个对象包装器最小值
您可以将数字定义为 -infinite,并且在从数字中添加或减去某些内容时,您首先检查变量是否等于该伪数。如果是这样,你就让它保持原样。
但是您可能会发现库函数为您提供了实现的功能,例如Java 中的Double 或c++ 中的std。
您不能真正表示无限值,因为您必须将其存储在有限数量的位中。在某些类型中有无穷大的符号版本(例如在典型的浮点规范中),但它的行为与严格意义上的无穷大不同。您需要在程序中包含一些额外的逻辑来模拟您需要的行为。