private static object TrueDivide(long x, BigInteger y) { if (y == BigInteger.Zero) { throw new DivideByZeroException(); } return (double)x / y.ToFloat64(); }
private static object TrueDivide(BigInteger x, double y) { if (y == 0.0) { throw new DivideByZeroException(); } return x.ToFloat64() / y; }
private static object TrueDivide(BigInteger x, BigInteger y) { if (y == BigInteger.Zero) { throw new DivideByZeroException(); } return x.ToFloat64() / y.ToFloat64(); }
public static object ToFloat(BigInteger self) { return self.ToFloat64(); }
//[PythonName("__pow__")] public static object Power(BigInteger x, double y) { return FloatOps.Power(x.ToFloat64(), y); }
//[PythonName("__pow__")] public static object Power(BigInteger x, long y) { if ((int)y == y) { return Power(x, (int)y); } else { if (y < 0) { return FloatOps.Power(x.ToFloat64(), y); } if (x == BigInteger.Zero) { return BigInteger.Zero; } else if (x == BigInteger.One) { return BigInteger.One; } else { throw Ops.ValueError("Number too big"); } } }
//[PythonName("__pow__")] public static object Power(BigInteger x, int y) { if (y < 0) { return FloatOps.Power(x.ToFloat64(), y); } return x.Power(y); }
public static object Compare(BigInteger x, object y) { if (y == null) return 1; int intVal; if (y is int) { if (x.AsInt32(out intVal)) return IntOps.Compare(intVal, y); } else if (y is ExtensibleInt) { if (x.AsInt32(out intVal)) return IntOps.Compare(intVal, ((ExtensibleInt)y).value); } else if (y is double) { return ((int)FloatOps.Compare((double)y, x)) * -1; } else if (y is ExtensibleFloat) { double dbl = x.ToFloat64(); return FloatOps.Compare(dbl, ((ExtensibleFloat)y).value); } else if (y is bool) { if (x.AsInt32(out intVal)) return IntOps.Compare(intVal, ((bool)y) ? 1 : 0); } else if (y is decimal) { double dbl = x.ToFloat64(); return FloatOps.Compare(dbl, y); } BigInteger bi; if (!Converter.TryConvertToBigInteger(y, out bi)) { object res = Ops.GetDynamicType(y).Coerce(y, x); if (res != Ops.NotImplemented && !(res is OldInstance)) { return Ops.Compare(((Tuple)res)[1], ((Tuple)res)[0]); } return Ops.NotImplemented; } BigInteger diff = x - bi; if (diff == 0) return 0; else if (diff < 0) return -1; else return 1; }