HaskellC++无穷量的表示

Posted 编程fan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HaskellC++无穷量的表示相关的知识,希望对你有一定的参考价值。



在看 dijkstra 算法时,看到了以下Python代码:
 
   
   
 
inf = float("inf")
上面使用了正无穷的值,非常现代。
无穷量在IEEE 754标准中有具体的定义,现代的编译器基本都实现了对IEEE 754标准的支持。实际上,在日常的编程中经常用到这个值,如果语言没有定义该值,我们通常会使用一些特殊的值迂回地实现。比如,假定值域为正整数,通常选取-1表示无穷大。虽然能实现相同的效果,但如果语言能支持无穷量,实现起来会更加容易。
在其他语言中,怎么表示呢?

C++

使用下面的代码可以取 double 类型的正无穷值, numeric_limits 是模板,也可以取 float 类型的。通常,浮点类型都可以取正无穷值。
 
   
   
 
double inf = std::numeric_limits<double>::infinity();
前面提到过,现代的编译器一般都实现了IEEE 754标准。谨慎起见,可以使用 std::numeric_limits<T>::is_iec559 判断是否支持该标准。在编译器支持该标准的前提下再使用 std::numeric_limits<float>::has_infinity 判断是否可以使用以上函数取无穷值。
C99 后, math.h 定义了 INFINITY 宏也可以得到正无穷值。

Haskell

可以使用下面代码取 Double 类型的正无穷值。
 
   
   
 
let inf = (read "Infinity") :: Double
除此之外, RealFloat 类型类提供了一些其他函数:
isInfinite 可以判断当前值是否是无穷量,将该函数应用于 (read "Infinity") :: Double 将会得到 True
isIEEE 可以判断当前当前参数是否是IEEE 754标准定义的浮点格式,功能与C++的 is_iec559 类似。
其他三方包提供了更为丰富的功能,如 ieee754

负无穷

上面都是正无穷,若编译器支持IEEE 754标准,负无穷很容易得到,只要在前面添加负号即可:
 
   
   
 
-inf



以上是关于HaskellC++无穷量的表示的主要内容,如果未能解决你的问题,请参考以下文章

Jekyll 偏移代码片段高亮的初始行

无穷小怎么表示

计量经济学多元线性回归模型F统计推断,整体显著性检验R ² 越接近于1,是否F统计量趋近无穷??

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

用0x3f3f3f3f表示无穷大,0xc0c0c0c0表示无穷小