C# NET是否以与myFloat*0.5f相同的方式编译myFloat/2?

C# NET是否以与myFloat*0.5f相同的方式编译myFloat/2?,c#,performance,C#,Performance,我想知道.NET中的编译器是否能检测到简单的2除运算,并将其转换为0.5的乘法运算 想想看,这可能是我可以改进游戏代码的一小部分 (事实上,我通常不会担心这一点,但这是我将来编写游戏代码时很容易想到的。) myFloat/2是否与myFloat/2f的处理方式相同?是的。在性能上没有差别。事实上,浮点硬件不能将float除以int,因此编译器必须在执行算术之前将任何int更改为float 编辑:当然,这是假设x是一个浮点数。否则,没关系。通常情况下,被二除会变成位移位。左移乘以2,右移除以2。对

我想知道.NET中的编译器是否能检测到简单的2除运算,并将其转换为0.5的乘法运算

想想看,这可能是我可以改进游戏代码的一小部分

(事实上,我通常不会担心这一点,但这是我将来编写游戏代码时很容易想到的。)


myFloat/2是否与myFloat/2f的处理方式相同?

是的。在性能上没有差别。事实上,浮点硬件不能将
float
除以
int
,因此编译器必须在执行算术之前将任何
int
更改为
float


编辑:当然,这是假设x是一个
浮点数
。否则,没关系。

通常情况下,被二除会变成位移位。左移乘以2,右移除以2。对于处理器来说,位移位比乘法或除法容易得多。

x是整数、浮点、双精度还是什么?这里有一个非常相似的问题:你有两匹马。你想知道哪个更快。你在网上问陌生人?我更倾向于赛马。如果您想知道哪种编码技术更快,请同时尝试这两种技术,然后您就会知道。为了跟进@EricLippert的评论,我怀疑您可以通过先检查jitted代码来节省一点时间,您将看到代码是相同的。在他的类比中,你可能会满足于你自己,你是在同一匹马与它自己比赛,而不是在实际比赛中。在任何情况下,将一个浮点数除以二都像递减指数一样简单,因此它必须是一个速度极快的操作。抛出异常,在调试器外部运行,抛出时附加。然后查看“反汇编”窗口。另外,这个问题已经被问过了,事实上我已经回答过了——答案是不,它不会进行优化,写为*0.5f实际上更快。谢谢。看到几乎所有的问题这么快就被锁定,真是令人难过。我知道反应会是这样的。但我认为这并不是一个非常愚蠢的问题。我完全忘记了二进制的东西,以及被2除是多么容易。右移也会使负数以错误的方式舍入。。