[Python-Dev] C Decimal - is there any interest?
Mateusz Rukowicz
mateusz.rukowicz at vp.pl
Mon Oct 15 19:59:27 CEST 2007
Mateusz Rukowicz wrote:
>Hi!
>
> I've been working on C decimal project during gSoC 2006. After year
>of idling (I had extremely busy first year on University, but well, most
>of us are extremely busy) I decided, that I will handle further
>developing (there is still much development needed, and updating to most
>recent standard is just the beginning). I understand, that chances of
>merging C Decimal with main tree are much lower than year ago, so I
>would like to know if there is still interest in C version of Decimal.
>If so - should I write PEP, or just code and 'we'll see later'?
>
>I've made a little benchmark - given loan amount, assets and months that
>it's meant to be payed off, find minimal monthly loan cost (It's just
>first idea that came to me for use Decimal in financial 'application'
>:>) [This solution has complexity O(log(amount) * months) which is far
>from optimal, but it's meant to benchmark Decimal, not python itself].
>
>Code:
>
>from _decimal import *
>import sys
>gc = getcontext();
>
>def check(loan, percent, monthly):
> ret = 0
> mult = 1 + (percent / 1200)
> if (loan - monthly) * mult >= loan:
> return -1 #you cannot payoff loan ;(
>
> while loan > 0:
> loan = loan - monthly
> loan = loan * mult
> ret += 1
> return ret
>
>def minimize_monthly(loan, percent, months):
> lower = Decimal(0)
> upper = Decimal(loan)
>
> while(upper > lower + Decimal("1e-3")):
> mid = (upper + lower)/2
> ret = check(loan, percent, mid)
> if(ret > months or ret == -1):
> lower = mid
> else:
> upper = mid
>
>
> return lower
>
>
>
>gc.prec = int(sys.argv[4])
>gc.rounding = ROUND_UP
>print minimize_monthly(Decimal(sys.argv[1]), Decimal(sys.argv[2]),
>int(sys.argv[3]))
>
>and timings (1mln loan, for 15 years, 2% year assets, and precision = 10
>:>):
>mateusz at MatLaps:~/programy/python/decimal/decimal-c$ time
>../../pyth/python/python loan.py 1000000 2 180 10
>6424.37955
>
>real 0m0.068s
>user 0m0.064s
>sys 0m0.004s
>mateusz at MatLaps:~/programy/python/decimal/decimal-c$ time
>../../pyth/python/python loan2.py 1000000 2 180 10
>6424.37955
>
>real 0m2.168s
>user 0m2.148s
>sys 0m0.016s
>
>Please don't misunderstand me - I don't want to show python Decimal is
>slow, I want to show that C Decimal is worth effort. I am also aware of
>simplicity of this benchmark. (This python have been of course compiled
>with -O3).
>
>Best regards,
>Mateusz Rukowicz.
>_______________________________________________
>Python-Dev mailing list
>Python-Dev at python.org
>http://mail.python.org/mailman/listinfo/python-dev
>Unsubscribe: http://mail.python.org/mailman/options/python-dev/mateusz.rukowicz%40vp.pl
>
>
>
Sorry for two messages, thunderbird told me first message hadn't been send.
More information about the Python-Dev
mailing list