可能是一个愚蠢的问题,但是有什么理由使用Math.Sign吗?

使用Math.Sign而不是仅使用if语句是否可以实现速度/优化?也许只是最佳实践/代码可读性的偏爱?

if (rayDirX < 0)
    stepX = -1;
else
    stepX = 1;

//----------

stepX = (rayDirX < 0) ? (-1) : (1);

//----------

stepX = Math.Sign(rayDirX);

最佳答案

我怀疑功能上的差异或性能差异是否很大,但Math.Sign版本明显更直观。尤其是在您的示例中未声明rayDirX的类型。但这非常微妙,我不会批评您使用这两种方法。

编辑:

还有一件事,您上面的示例有一个小错误。对于0,Math.Sign将返回0。这是Math.Sign框架之外的反编译代码:

public static int Sign(int value)
{
  if (value < 0)
  {
    return -1;
  }
  if (value > 0)
  {
    return 1;
  }
  return 0;
}

关于C#(If <或If>)vs Math.Sign,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9672908/

10-12 23:10