【问题标题】:Fortran: is 0.d0 always == 0?Fortran:0.d0 总是 == 0 吗?
【发布时间】:2016-02-16 13:36:29
【问题描述】:

在 fortran 中,我是否可以始终依靠 0.d0 == 0 来生成 .true。 ? 即:

real(8) :: x
integer :: i

x = 0.d0
i = 0
write(*,*) x == i

我尝试了一段简单的代码,结果是 .true。但我可以一直相信这个吗? 这样做的原因是我想避免acos(x) if x

【问题讨论】:

    标签: fortran double rounding precision


    【解决方案1】:

    i 将被提升为浮点类型之前应用关系相等测试==。

    浮点零会将true 与其自身以及带负符号的零进行比较。

    “我可以一直相信这个吗?”是的,你可以。

    【讨论】:

    • 谢谢,我认为浮点 0 是 0(不代表 0.000000000000000000000000000000000000001 或类似的)
    • 不,零可以用浮点数精确表示。此链接可能对您有所帮助:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
    • @ErikThysell 通常的规则是可以精确表示小整数。当然如果直接输入,有些计算的结果可能不准确。
    • 对于 IEEE754 双精度浮点,“小”表示不超过 2 的 53 次方。
    猜你喜欢
    • 2020-09-22
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多