diff options
| -rw-r--r-- | src/video_core/pica_types.h | 18 | 
1 files changed, 7 insertions, 11 deletions
| diff --git a/src/video_core/pica_types.h b/src/video_core/pica_types.h index 5d7e10066..2eafa7e9e 100644 --- a/src/video_core/pica_types.h +++ b/src/video_core/pica_types.h @@ -58,11 +58,12 @@ public:      }      Float<M, E> operator*(const Float<M, E>& flt) const { -        if ((this->value == 0.f && !std::isnan(flt.value)) || -            (flt.value == 0.f && !std::isnan(this->value))) -            // PICA gives 0 instead of NaN when multiplying by inf -            return Zero(); -        return Float<M, E>::FromFloat32(ToFloat32() * flt.ToFloat32()); +        float result = value * flt.ToFloat32(); +        // PICA gives 0 instead of NaN when multiplying by inf +        if (!std::isnan(value) && !std::isnan(flt.ToFloat32())) +            if (std::isnan(result)) +                result = 0.f; +        return Float<M, E>::FromFloat32(result);      }      Float<M, E> operator/(const Float<M, E>& flt) const { @@ -78,12 +79,7 @@ public:      }      Float<M, E>& operator*=(const Float<M, E>& flt) { -        if ((this->value == 0.f && !std::isnan(flt.value)) || -            (flt.value == 0.f && !std::isnan(this->value))) -            // PICA gives 0 instead of NaN when multiplying by inf -            *this = Zero(); -        else -            value *= flt.ToFloat32(); +        value = operator*(flt).value;          return *this;      } | 
