【发布时间】:2011-10-11 12:57:04
【问题描述】:
是
if(float > int)
真的只是
if(float > (float)int)
我正在做这样的研究,似乎做 float 到 int 和 int 到 float 的转换成本很高。 我有很多浮点/整数比较。
只是一个简单的问题
【问题讨论】:
标签: c# casting floating-point comparison int
是
if(float > int)
真的只是
if(float > (float)int)
我正在做这样的研究,似乎做 float 到 int 和 int 到 float 的转换成本很高。 我有很多浮点/整数比较。
只是一个简单的问题
【问题讨论】:
标签: c# casting floating-point comparison int
没有指令可以直接将浮点数与整数进行比较,因此它首先将整数转换为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(浮点和双重考虑之间的转换,从不太具体到更具体的转换为“加宽” - 与其他类型相反)。
是的。没有 >(float, int) 运算符 - 只有 >(int, int) 和 >(float, float)。因此编译器通过将第二个操作数转换为float 来调用后一个运算符。有关详细信息,请参阅 C# 规范的第 7.3.6.2 节:
二进制数字提升发生在预定义的 +、-、*、/%、&、|、^、==、!=、>、= 和
(然后列出所涉及的步骤。)
您确定int 到float 的转换需要很长时间吗?它应该很便宜。
【讨论】: