Merge pull request #2944 from huwpascoe/perf-3
Optimized Float<M,E> multiplication
This commit is contained in:
		@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user