Python - zapis zmiennoprzecinkowy

0

Hej,

Mam do wykonania uczelniane zadanie ktore zdecydowalem sie zrealizowac w Pythonie,niestety moj kod nie do konca spelnia warunki zadania.Oto tresc zadania :

https://pastebin.com/089Uped8

A oto moj kod ktory po sprawdzeniu przez uczelniany SPOJ wyrzuca 68,6% ,2 bledy (nie jest opisane jakiegorodzaju bledy) i jeden timeout.

Oto moj kod


def bindigits(n, bits):
    s = bin(n & int("1" * bits, 2))[2:]
    return ("{0:0>%s}" % (bits)).format(s)


def bbin(s): return bin(s)[2:]

n, d, m, c = map(int, raw_input().split())
number = map(int, raw_input().split())

dec = 0

pos = len(number) - 1

for i in range(len(number)):
    dec = dec + number[i] * (d ** pos)
    pos = pos - 1

sdec = ('1' if dec < 0 else '0') + str(bbin(dec))[:m - 1]
print(sdec)

mant = int(sdec, 2)

diff = abs(mant - dec)
ex = 0

while(True):
    mant = mant << 1
    new_diff = abs(mant - dec)
    if(new_diff < diff):
        diff = new_diff
        ex = ex + 1
    else:
        break

print(bindigits(ex, c))

J/w bede bardzo wdzieczny za pomoc.
Pzdr

0

Timeout to też błąd defakto, i to w sumie najgorszy z punktu widzenia programowania algorytmów matematycznych (ale z reguły się to na samym końcu usprawnia, więc zero stresu :D). Bo znaczy tyle że program jest zbyt wolny, ale do rzeczy, jak możnaby ci pomóc :).

Ogólnie polecam ci stworzyć i w programie wykorzystać kilka funkcji przedstawiających:

  • Algorytm Hornera (do sprawdzenia wyniku, wynikowo nie potrzebujesz :P)
  • Algorytm konwersji na kod FP2

Z samym kodem i jego optymalizacją ci nie pomogę niestety, bo moim skromnym zdaniem tak namieszałeś że szkoda deszyfrować bez komentarzy.
A u mnie nie działa, więc naprawa żeby u mnie działał zajęłaby dłużej niż napisanie swojego od zera :).

0

W sumie, polecam dwa tematy które mogą ci pozwolić to zoptymalizować:
http://interactivepython.org/courselib/static/pythonds/BasicDS/ConvertingDecimalNumberstoBinaryNumbers.html
http://www.geeksforgeeks.org/type-conversion-python/

Oraz tu konkretnie o co chodzi z konwersją na kod FP2:
http://wozna.org/students/2011-2012/pi/pi05.pdf

Chyba że źle rozczytałem polecenie, to wybacz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1