Unity C# Mathf.Abs()取绝对值性能测试

栏目: 编程语言 · 发布时间: 6年前

内容简介:之前有人提到过取绝对值时 直接写三目运算符比用Math.Abs()效率高 没觉得能高太多今天测了一下 真是不测不知道 一测吓一跳 居然快了20%左右这性能差距有点不太合理啊 看下源码发现 很多Mathf的方法就是多封装了一层Math里的方法 把double型转成float型了 即便很简单得方法也没有重新实现

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

今天测了一下 真是不测不知道 一测吓一跳 居然快了20%左右

这性能差距有点不太合理啊 看下源码发现 很多Mathf的方法就是多封装了一层Math里的方法 把double型转成float型了 即便很简单得方法也没有重新实现

官方有点偷懒了 所以性能差距才会这么大 以后要求性能高的地方要注意 老老实实写一遍 能提升不少性能

Mathf.Abs()源码:

// Returns the absolute value of /f/.
public static float Abs(float f) { return (float)Math.Abs(f); }

// Returns the absolute value of /value/.
public static int Abs(int value) { return Math.Abs(value); }

测试代码:

using UnityEngine;
using UnityEditor;
using System.Diagnostics;

/// <summary>
/// 执行时间测试
/// ZhangYu 2019-04-04
/// </summary>
public class TimeTest : MonoBehaviour {

    public int executeTimes = 1;

    private void OnValidate() {
        times = executeTimes;
    }

    /// <summary>  执行次数 </summary>
    private static int times = 1;
    private static Stopwatch watch = new Stopwatch();

    [MenuItem("CONTEXT/TimeTest/执行")]
    private static void Execute() {
        watch.Reset();
        watch.Start();
        float a = 0.1f;
        for (int i = 0; i < times; i++) {
            FloatAbs2(a);
        }
        watch.Stop();
        print(string.Format("Times: {0} Elaped: {1}", times, watch.Elapsed));
    }

    // 方法1: Times: 1000000 Elaped: 0.0267839 - 0.0278066
    // Mathf.Abs(a)

    // 方法2: Times: 1000000 Elaped: 0.0178621 - 0.0181184
    public static int IntAbs2(int a) {
        return (a ^ (a >> 31)) - (a >> 31);
    }

    // 方法1: Times: 1000000 Elaped: 0.0277130 - 0.0289079
    // Mathf.Abs(a)

    // Times: 1000000 Elaped: 0.0207271 - 0.0220157
    private static float FloatAbs2(float a) {
        return a < 0 ? -a : a;
    }

}

官方Mathf部分源码:

Unity C# Mathf.Abs()取绝对值性能测试

Unity C# Mathf.Abs()取绝对值性能测试

更高性能取绝对值方法:

https://blog.csdn.net/qq_1507...

以上所述就是小编给大家介绍的《Unity C# Mathf.Abs()取绝对值性能测试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++编程风格

C++编程风格

卡吉尔 / 聂雪军 / 机械工业出版社发行室 / 2007-1 / 25.00元

本书描述C++语言中较深层次的程序设计思想和使用方法,包含大量软件工程概念和设计模式,重点介绍大规模编程相关的内容,例如增加代码的可读性、可维护性、可扩展性以及执行效率等的方法。本书的示例代码都是从实际程序中抽取出来的,融人了作者的实际开发经验。讲解如何正确地编写代码以及避开一些常见的误区和陷阱,并给出了许多实用的编程规则,可快速提升读者的C++编程功力。   本书描述平实,示例丰富,适合有......一起来看看 《C++编程风格》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试