abs 不会整数 方法 溢出_Unity C# Mathf.Abs()取绝对值性能测试

之前有人提到过取绝对值时 直接写三目运算符比用Mathf.Abs()效率高 没觉得能高太多

今天测了一下 真是不测不知道 一测吓一跳 直接写三目运算符比Mathf.Abs()效率高数倍

这性能差距有点不太合理啊! 看下源码发现 很多Mathf的方法就是多封装了一层Math里的方法 把double型转成float型了,而看了C#源码发现Abs里有一些对错误数据的判断处理,比如检查值是溢出,如果溢出会抛出异常等(比如int.MinValue无法取到对应的正整数,数据溢出了)。多了一些判断语句和方法调用,效率自然比直接写代码要低了。

以后要求性能高的地方要注意,老老实实写一遍,能提升不少性能。当然,你要保证数值不会溢出。

Mathf.Abs(v)

v = v < 0 ? -v : v

if (v < 0) v = -v

// 这三种取绝对值写法中 if判断负数 效率最高

测试代码:

// times = 100000000

// 1亿次 ( >=0时 2980ms) ( <0时 2993ms)

private void AbsTest0(float v) {

watch.Reset();

watch.Start();

for (int i = 0; i < times; i++) {

float f = v;

f = Mathf.Abs(f);

}

watch.Stop();

Log("AbsTest0 Mathf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值