List Info

Thread: C Decimal - is there any interest?




C Decimal - is there any interest?
user name
2007-10-15 11:00:54
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 
:>):
mateuszMatLaps:~/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
mateuszMatLaps:~/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-Devpython.org
ht
tp://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: http://mail.python.org/mailman/options/p
ython-dev/nessto%40sharedlog.com

Re: C Decimal - is there any interest?
user name
2007-10-15 12:59:27
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 
>:>):
>mateuszMatLaps:~/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
>mateuszMatLaps:~/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-Devpython.org
>ht
tp://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.
_______________________________________________
Python-Dev mailing list
Python-Devpython.org
ht
tp://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: http://mail.python.org/mailman/options/p
ython-dev/nessto%40sharedlog.com

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )