【问题标题】:is if(float > int) really if(float > (float)int)?if(float > int) 真的是 if(float > (float)int) 吗?
【发布时间】:2011-10-11 12:57:04
【问题描述】:

 if(float > int)

真的只是

 if(float > (float)int)

我正在做这样的研究,似乎做 float 到 int 和 int 到 float 的转换成本很高。 我有很多浮点/整数比较。

只是一个简单的问题

【问题讨论】:

    标签: c# casting floating-point comparison int


    【解决方案1】:

    是的!

    它们是一样的。

    没有指令可以直接将浮点数与整数进行比较,因此它首先将整数转换为float


    但是:

    小心:这意味着int-to-float 转换是无损的。它仍然会丢失一些信息,所以这段代码:

    (int)(float)integer == integer
    

    并不总是评估为true! (用int.MaxValue 试试看。double/long 同上。)

    【讨论】:

    • 值得注意的是,虽然1000000001 > (float)1000000000wo;; return false,那是因为后面的数量并不真正代表“1,000,000,000”。相反,它代表“介于 999,999,968 和 1,000,000,032 之间的东西”;前者的数量并不一定大于后者。请注意,1222333443 将比较等于 1222333444f,但 1222333443.0 将比较大于 1222333444f,因为后者将被强制转换为 1222333440.0(浮点和双重考虑之间的转换,从不太具体到更具体的转换为“加宽” - 与其他类型相反)。
    【解决方案2】:

    是的。没有 >(float, int) 运算符 - 只有 >(int, int) 和 >(float, float)。因此编译器通过将第二个操作数转换为float 来调用后一个运算符。有关详细信息,请参阅 C# 规范的第 7.3.6.2 节:

    二进制数字提升发生在预定义的 +、-、*、/%、&、|、^、==、!=、>、= 和

    (然后列出所涉及的步骤。)

    您确定intfloat 的转换需要很长时间吗?它应该很便宜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多