Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Valgte tags:

Filtrering:

2.1.9: Totallssystemet

Det går an å vise at 0.1=1/16+1/32+1/256+1/512+1/4096+1/8192+⋯ Dette er representasjonen av 0.1 i totall-systemet, den såkalte binære representasjonen av tallet. Vi skriver det som regel kortere som 0.1=0.000110011001100110011⋯(i totallsystemet). Bruk uttrykket over til å regne ut seks tilnærminger til 0.1 med økende nøyaktighet.
Hint: se seksjon 2.1 i ProMod boka om totallsystemet

Vi ser at tallet gjentar seg systematisk i totallsystemet. Ved å se hvordan man konverterer fra totallsystemet til titallsystemet(ProMod 2.1.) kan vi se hvordan vi finner brøkene i titallsystemet. Hvis vi ser bort ifra alle ledd som blir 0 regner vi som nedenfor:
alt text

For å løse denne oppgaven er det best å bruke en for-løkke som lar oss lage summer. Vi må også se på potensene til to-tallene som ikke blir 0. Dette gir oss altså en rekkefølge med potenser som er: -4,-5,-8,-9,-12,-13...

Siden vi bare skal tilnærme dette ene tallet velger vi å bruke en if-statement for å bestemme neste potens. Vi vil at hvis potensen er et oddetall skal neste potens være den gamle potensen -3. Ellers(else) skal neste potens være gamle potens -1.

For å gjøre dette skriver vi følgende kode:

ant = input("hvor mange ledd skal med?")
ant = int(ant) #gjør om til heltall

tilnarming = 0.0#tilnærming
potens = -4.0#første potens
for i in range(ant):#går ant ganger
    tilnarming += 2**potens#Legger til på tilnærming

    #avgjør neste ledd i summen
    if (int(potens)/2)!=int(potens/2):
        potens = potens - 3.0
    else:
        potens = potens - 1.0

print(tilnarming)#printer tilnærming

Vi lar brukeren bestemme hvor mange ledd som skal med(nøyaktigheten). Vi kjører altså programmet 6 ganger med ulike input. Husk at tallet som står inne i range må være et heltall. Betingelsen != betyr ikke lik. -= og += trekker fra og legger til verdi på en variabel, så

a = a+5

kan skrives som

a +=5

kommentar:
Dette kan også løses ved å bruke en for løkke inni en forløkke på følgende måte:

for ant in range(1,7):  #kjører koden nedenfor med ant=1 til 6
    tilnarming = 0.0    #tilnærming
    potens = -4.0       #første potens

    for i in range(ant):        #går ant ganger
        tilnarming += 2**potens #Legger til på tilnærming

        #avgjør neste ledd i summen
        if (int(potens)/2)!=int(potens/2):
            potens = potens - 3.0
        else:
            potens = potens - 1.0

    print(tilnarming)#printer tilnærming

Vi kjører det første programmet med økende antall ledd og får:

hvor mange ledd skal med?1
0.0625

hvor mange ledd skal med?2
0.09375

hvor mange ledd skal med?5
0.099853515625

hvor mange ledd skal med?10
0.09999990463256836

hvor mange ledd skal med?11
0.09999996423721313

hvor mange ledd skal med?100
0.1

Ovenfor ser vi at summen nærmer seg raskt mot 0.1. Med 100 ledd så har vi overkommet maskin-nøyaktighet og programmet sier at summen er 0.1