Interoperability with Decimal ============================= >>> import gmpy2 as G >>> from gmpy2 import mpz, mpq, mpfr >>> from decimal import Decimal Test comparisons ---------------- Non-trivial comparions between mpfr and Decimal instances are only equal when the fractional can be written at 1/2**n. >>> mpfr('123.456') == Decimal('123.456') False >>> mpfr('123.5') == Decimal('123.5') True >>> mpq(123456,1000) == Decimal('123.456') True >>> mpz(123) == Decimal(123) True >>> mpfr('123.456') > Decimal('123.456') True >>> mpfr('123.456') < Decimal('123.456') False >>> Decimal('123.456') > mpfr('123.456') False >>> Decimal('123.456') < mpfr('123.456') True Test elementary operations -------------------------- >>> mpz(23) == Decimal(23) True >>> mpz(Decimal('123.456')) mpz(123) >>> mpq(Decimal('123.456')) mpq(15432,125) >>> mpfr(Decimal('123.456')) mpfr('123.456') >>> f = mpfr('123.456') >>> q = mpq('789123/1000') >>> z = mpz('234') >>> dd = Decimal('12.34') >>> fd = Decimal('123.456') >>> qd = Decimal('789.123') >>> zd = Decimal('234') >>> f+dd mpfr('135.79599999999999') >>> dd+f mpfr('135.79599999999999') >>> q+dd mpfr('801.46300000000008') >>> dd+q mpfr('801.46300000000008') >>> z+dd mpfr('246.34') >>> dd+z mpfr('246.34') >>> f-dd mpfr('111.116') >>> dd-f mpfr('-111.116') >>> q-dd mpfr('776.78300000000002') >>> dd-q mpfr('-776.78300000000002') >>> z-dd mpfr('221.66') >>> dd-z mpfr('-221.66') >>> f*dd mpfr('1523.44704') >>> dd*f mpfr('1523.44704') >>> q*dd mpfr('9737.7778200000012') >>> dd*q mpfr('9737.7778200000012') >>> z*dd mpfr('2887.5599999999999') >>> dd*z mpfr('2887.5599999999999') >>> f/dd mpfr('10.00453808752026') >>> dd/f mpfr('0.099954639709694135') >>> q/dd mpfr('63.948379254457052') >>> dd/q mpfr('0.015637612894314319') >>> z/dd mpfr('18.962722852512155') >>> dd/z mpfr('0.052735042735042738') >>> G.ceil(dd) mpfr('13.0') >>> G.floor(dd) mpfr('12.0') >>> G.trunc(dd) mpfr('12.0') >>> mpfr(dd).precision 53 >>> G.sin(Decimal("123.456")) mpfr('-0.80393736857282394') >>> G.sqrt(Decimal("123.456")) mpfr('11.111075555498667') >>> G.is_nan(Decimal("123.456")) False >>> G.is_nan(Decimal("NaN")) True >>> G.is_nan(Decimal("Inf")) False >>> G.is_inf(Decimal("Inf")) True >>> G.is_inf(Decimal("-Inf")) True