计算机中的数值问题

    现代计算机几乎都服从IEEE浮点标准,当对数值算法编码时,IEEE浮点数表示具有很多重要特性。

    IEEE浮点实数中有三个"特殊值":

        1.无穷大(∞):比任何其他有效数都大的有效数。

        2.负无穷大(-∞):比任何其他有效数都小的有效数。

        3.无效数(NaN):这是一个无效数,由未定义运算得出的结果,例如0/0.

    IEEE浮点标准的制定中做了一些 规定,对于任意实数a,下面的规则成立:

        +a/(+∞) = +0

        -a/(+∞) =  -0

        +a/(-∞) =  -0

        -a/(-∞) =  +0

    需要注意的是IEEE浮点标准将-0和+0区别开。在多数图形学程序中,这种区别不大,但是对于更经典的数值算法,必须牢记这一点。

    其他涉及无穷大的运算,与期望的结果一样。对于正实数a,则有

        ∞+∞ = +∞

        ∞-∞ = NaN

        ∞*∞ = ∞

        ∞/∞ = NaN

        ∞/a = ∞

        ∞/0 = ∞

        0/0 = NaN

    涉及无穷大的布尔表达式规则如下,与期望的结果一样:

        1.所有有效的有效数都小于+∞

        2.所有有效的有效数都大于-∞

        3.-∞小于+∞

    包含无效数(NaN)的表达式规则很简单,具体如下:

        1.任何包含NaN的算术表达式,结果是NaN

        2.任何包含NaN的布尔表达式,结果是假

    也许在IEEE浮点标准中最实用的是堆除数为0的情况的处理。对于任意正实数a,下面包含除数为0 的规则成立:

        +a/+0 = +∞

        -a/+0 = -∞

    在IEEE浮点标准出现之前,如果遇到除0导致崩溃,我们就会很无奈的在代码中添加浮点数是否接近于0 的判断。有了IEEE浮点标准后,我们就

不需要进行特别的检查,这样就使得程序更加简单,稳健,高效


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值