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@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@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.
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@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@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@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.
participants (1)
-
Mateusz Rukowicz