public static RealNumber operator /(RealNumber a, RealNumber b) { if (!a.IsDefinite() || !b.IsDefinite()) { return(UndefinedStateSuperSwitch.Switch( () => new RealNumber(UndefinedState.NAN), () => new RealNumber(UndefinedState.NAN), () => new RealNumber(UndefinedState.NAN), () => new RealNumber(UndefinedState.NAN), () => b.Value >= 0 ? new RealNumber(UndefinedState.POSITIVE_INFINITY) : new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => b.Value >= 0 ? new RealNumber(UndefinedState.NEGATIVE_INFINITY) : new RealNumber(UndefinedState.POSITIVE_INFINITY), () => RealNumber.NaN(), () => RealNumber.NaN(), a, b)); } if (!Functional.BothAreEqual(a, b, HierarchyLevel.REAL)) { return(Number.OpDiv(a, b) as RealNumber); } if (b.Value != 0) { return(Number.Functional.Downcast(new RealNumber(a.Value / b.Value)) as RealNumber); } else { return a.Value switch { var x when x > 0 => new RealNumber(UndefinedState.POSITIVE_INFINITY), var x when x < 0 => new RealNumber(UndefinedState.NEGATIVE_INFINITY), _ => new RealNumber(UndefinedState.NAN) } }; }
public static RealNumber operator /(RealNumber a, RealNumber b) { if (!a.IsDefinite() || !b.IsDefinite()) { return(UndefinedStateSuperSwitch.Switch( () => RealNumber.NaN(), () => RealNumber.NaN(), () => RealNumber.NaN(), () => RealNumber.NaN(), () => b.Value switch { var x when EDecimalWrapper.IsGreater(x, 0) => new RealNumber(UndefinedState.POSITIVE_INFINITY), var x when EDecimalWrapper.IsLess(x, 0) => new RealNumber(UndefinedState.NEGATIVE_INFINITY), var x when EDecimalWrapper.IsEqual(x, 0) => RealNumber.NaN() },
public static RealNumber operator *(RealNumber a, RealNumber b) { if (!a.IsDefinite() || !b.IsDefinite()) { return(UndefinedStateSuperSwitch.Switch( () => new RealNumber(UndefinedState.POSITIVE_INFINITY), () => new RealNumber(UndefinedState.POSITIVE_INFINITY), () => new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => EDecimalWrapper.IsGreater(b.Value, 0) ? new RealNumber(UndefinedState.POSITIVE_INFINITY) : new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => EDecimalWrapper.IsGreater(b.Value, 0) ? new RealNumber(UndefinedState.NEGATIVE_INFINITY) : new RealNumber(UndefinedState.POSITIVE_INFINITY), () => EDecimalWrapper.IsGreater(a.Value, 0) ? new RealNumber(UndefinedState.POSITIVE_INFINITY) : new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => EDecimalWrapper.IsGreater(a.Value, 0) ? new RealNumber(UndefinedState.NEGATIVE_INFINITY) : new RealNumber(UndefinedState.POSITIVE_INFINITY), a, b)); } if (!Functional.BothAreEqual(a, b, HierarchyLevel.REAL)) { return(Number.OpMul(a, b) as RealNumber); } return(Number.Functional.Downcast(new RealNumber(CtxMultiply(a.Value, b.Value))) as RealNumber); }
public static RealNumber operator -(RealNumber a, RealNumber b) { if (!a.IsDefinite() || !b.IsDefinite()) { return(UndefinedStateSuperSwitch.Switch( () => new RealNumber(UndefinedState.NAN), () => new RealNumber(UndefinedState.NAN), () => new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => new RealNumber(UndefinedState.POSITIVE_INFINITY), () => new RealNumber(UndefinedState.POSITIVE_INFINITY), () => new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => new RealNumber(UndefinedState.NEGATIVE_INFINITY), () => new RealNumber(UndefinedState.POSITIVE_INFINITY), a, b)); } if (!Functional.BothAreEqual(a, b, HierarchyLevel.REAL)) { return(Number.OpSub(a, b) as RealNumber); } return(Number.Functional.Downcast(new RealNumber(CtxSubtract(a.Value, b.Value))) as RealNumber); }