C#(如果 < 或如果 >)与 Math.Sign

标签 c# math if-statement sign

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

使用 Math.Sign 而不是仅使用 if 语句是否有速度/优化方面的问题?也许只是最佳实践/代码可读性偏好?

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

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

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

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

stepX = Math.Sign(rayDirX);

最佳答案

我怀疑是否存在功能差异或性能差异(如果有的话),但 Math.Sign 版本更直观一些。特别是在您未声明 Type of 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#(如果 < 或如果 >)与 Math.Sign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672908/

相关文章:

java - 大于 lg N 的最小整数

math - 区分一个 2 的补码负数和相应的正数

c++ - 确定两个其他值之间是否包含值的最有效方法

JavaScript - 使用 indexOf() 在字符串中搜索字符

java - 如何使用 && 正确检查 else 语句?

apache - .htaccess - 如何根据环境变量设置自定义 header ?

c# - 如何使用 C# 将项目添加到 foreach 循环中的列表

c# - 小数的两种显示方式

c# - 关闭客户端应用程序: existing connection was forcibly closed by the remote host时在服务器上记录ServiceModel错误

c# - 无法加载类型 'System.Net.Security.SslStream'