From adcc211feb7827127b2548c791f2de0b6efda3d3 Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Tue, 14 Feb 2017 04:10:02 +0100 Subject: Make nan==nan true for GDScript After discussing this with Reduz this seemed like the best way to fix #7354. This will make composite values that contain NaN in the same places as well as the same other values compare as the same. Additionally non-composite values now also compare equal if they are both NaN. This breaks IEEE specifications but this is probably what most users expect. There is a GDScript function check for NaN if the user needs this information. This fixes #7354 and probably also fixes #6947 --- core/math/vector3.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'core/math/vector3.cpp') diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp index 2ab5fa046..7fdb54bb6 100644 --- a/core/math/vector3.cpp +++ b/core/math/vector3.cpp @@ -176,6 +176,17 @@ Vector3 Vector3::cubic_interpolate(const Vector3& p_b,const Vector3& p_pre_a, co return out; } # endif +bool Vector3::nan_equals(const Vector3& p_v) const { + return (x == p_v.x && y == p_v.y && z == p_v.z) || + (x == p_v.x && y == p_v.y && isnan(z) && isnan(p_v.z)) || + (x == p_v.x && isnan(y) && isnan(p_v.y) && z == p_v.z) || + (isnan(x) && isnan(p_v.x) && y == p_v.y && z == p_v.z) || + (x == p_v.x && isnan(y) && isnan(p_v.y) && isnan(z) && isnan(p_v.z)) || + (isnan(x) && isnan(p_v.x) && y == p_v.y && isnan(z) && isnan(p_v.z)) || + (isnan(x) && isnan(p_v.x) && isnan(y) && isnan(p_v.y) && z == p_v.z) || + (isnan(x) && isnan(p_v.x) && isnan(y) && isnan(p_v.y) && isnan(z) && isnan(p_v.z)); +} + Vector3::operator String() const { return (rtos(x)+", "+rtos(y)+", "+rtos(z)); -- cgit v1.2.3-70-g09d2