I just discovered mpmath (<http://code.google.com/p/mpmath/wiki/Documentation>) and am trying to write a useful function that uses it to compute factorials. Here's what I have:
def fact(n, precision=15, full=False): """ compute n! """ from mpmath import mpf if not isinstance(n, int): return None elif n < 0: return None n = mpf(n) if full: precision = n * 10 # ensures that for n < 1 billion, product will not be in scientific notation (i.e., no '+') mpf.dps = precision product = mpf(1) while n > mpf(1): product *= n n -= 1 if '+' in str(product): return product else: return int(str(product)[:-2]) # product is a float, ending in '.0', so this needs to be removed and string converted to int. The code is also at <http://python.pastebin.com/m33d52d54>. And a couple of example uses that illustrate my problem: # 1 (precision default overridden and set to 20; full left at default of False) >>> print fact(50, 20) 3.0414093201713378044e+64 # 2 (both precision and full left at their defaults) >>> print fact(50) 3.04140932017134e+64 # 3 (full set to True, forcing precision to be specified--but irrelevant what it is set to) >>> print fact(50, 3, True) 30414093201713378043612608166064768844377641568960512000000000000 # 4 (see # 3) >>> print fact(50, 30, True) 30414093201713378043612608166064768844377641568960512000000000000 And if the function is rewritten as def fact(n, full=False, precision=15) there would be the analogous problem involving full. Is there a way to solve this problem of the unnecessary setting of the 2nd argument? Thanks, Dick Moores _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor