|
@@ -58,11 +58,12 @@ public:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
Float<M, E> operator*(const Float<M, E>& flt) const {
|
|
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 {
|
|
Float<M, E> operator/(const Float<M, E>& flt) const {
|
|
@@ -78,12 +79,7 @@ public:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
Float<M, E>& operator*=(const Float<M, E>& flt) {
|
|
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;
|
|
return *this;
|
|
|
}
|
|
}
|
|
|
|
|
|