【Unity】0と比較する拡張メソッド

DEVELOP, Unity

浮動小数点同時のゼロ比較は、演算時に発生する誤差で比較演算子による正確な比較ができません。0かどうかを比較したい場合は Mathf.Epsilon や System.Double.Epsilon と比較してあげると良いです。というわけで値に対する拡張メソッドです。

ソースコード

using UnityEngine;
public static class NumExtension
{
	/// <summary>
	/// 0か比較する
	/// </summary>
	public static bool IsZero(this float val)
	{
		return Mathf.Abs(val) < Mathf.Epsilon;
	}
	/// <summary>
	/// 0か比較します
	/// </summary>
	public static bool IsZero(this float val, float _epsilon)
	{
		return Mathf.Abs(val) < _epsilon;
	}
	/// <summary>
	/// 0か比較します
	/// </summary>
	public static bool IsZero(this double _val)
	{
		return System.Math.Abs(_val) < System.Double.Epsilon;
	}
	/// <summary>
	/// 等価か確認します
	/// </summary>
	public static bool IsEqual(this float valA, float valB)
	{
		return Mathf.Abs(valA - valB) < Mathf.Epsilon;
	}
}

使用例

int value = 0;
if(value.IsZero())
{
    // ゼロの時の処理。
}

スポンサーリンク

Posted by kazupon