noobn Skrevet 27. april 2009 Del Skrevet 27. april 2009 (endret) Hei! Jeg har et par oppgaver som jeg sliter utrolig mye med. ergo må jeg bare poster det her i håp om å finne noen engler... Oppgave 1: Fibonacci-tallene er definert ved A(n+2) = A(n+1) + A(n) hvor a(1) = a(2) = 1. vi finner altså neste tall ved legge sammen de to foregående. De første ni fibonacci tallene er derfor 1,1,2,3,5,8,13,21,34.... merk at denne tallfølgen vosker rask, for eks. er a(55) = 139583862445. Dette betyr at tallene ikke kan representeres innenfor ett 32.vit register fra et visst nummer av og oppover. Finn først ut hvor mange av Fibonacci-tallene som lar seg representere i et 32-bits register (altså som en int i C, og skriv deretter et C-program med inline assembler kode, hvor denne assembler-koden utfører selve beregninen av tallene. ) Programmet skal bergene nøyaktig så mange tall det lar seg gjøre. Men husk at et binærtall blir representert på 2-er komplement form, så en 1-er i mest signifikante bit, gir et negativt tall, og dermed overflow) Dette antallet skal leses inn av programmet til en variabel, du kan bruke scanf til dette Bruk printf til å skrive tallene ut til stdout. Oppgave 2; vi skal i denne oppgaven se litt på bruk a flyttalls-instruksjoner. Vi vet at 2.gradslikning ax2 + bx + c = 0, hvor a ikke er lik 0, har løsningen X(1,2) = ( -b +-roten(b^2 - 4ac) ) / 2a Likningen har altså reelle løsningen hvis b^2 - 4ac større eller lik 0, ikke relle tall ellers. Du skal i denne oppgaven bruke inline assembler med flyttalls- instruksjoner i et C-Prgram for å finne de reelle løsningene av en 2-gradslikning. Du representerer C-variablene som float. Programmet skal lese inn koeffisientene a, b og c (bruk scanf til dette.) hvis b^2 - 4ac < 0 skal programmet skrive ut "no real solutions" ellers skal de reelle løsningene være output (Bruk printf til dette ). Alle beregningeer på flyttall skal gjøres med inline assembler i programmet. Om du er interessert i å hjelpe meg med dette send en liten pm(slik at jeg kan gi deg noe tilbake igjen for tiden) Takker og bukker hvis du tar initiativ. Endret 28. april 2009 av noobn Lenke til kommentar
k-ryeng Skrevet 27. april 2009 Del Skrevet 27. april 2009 Hei! Emnetittelen i denne tråden er lite beskrivende for trådens innhold og det er derfor ingen god emnetittel. Jo bedre og mer beskrivende emnetittelen er, jo lettere er det for andre å skjønne trådens innhold og det vil være lettere å treffe den riktige forumbrukeren med det rette svaret. Ber deg derfor om å endre emnetittel. Vennligst forsøk å ha dette i tankene neste gang du starter en tråd, og orienter deg om hva vår nettikette sier om dårlig bruk av emnetitler. Husk at en god emnetittel skal beskrive eller oppsummere hvilket problem du har - ikke at du har et problem. En god emnetittel skal heller ikke kun bestå av et produktnavn. Bruk -knappen i første post for å endre emnetittelen. (Dette innlegget vil bli fjernet ved endring av emnetittel. Ikke kommenter dette innlegget, men gjerne dette innlegget når tittelen er endret, så vil det bli fjernet..) Lenke til kommentar
LostOblivion Skrevet 30. april 2009 Del Skrevet 30. april 2009 Det største heltallet som kan representeres med 32 bit er 2^32-1, altså 4,294,967,295. Hvis du bruker int (og ikke unsigned int), vil det største tallet som kan representeres i 32 bit være halvparten av dette, altså 2^31 = 2,147,483,647. Du må altså finne nye fibonacci-tall så lenge tallet er under denne verdien. Alt over denne verdien (i assembly) vil tolkes som negative tall av en C-funksjon som benytter seg av verdien. Du kan gjøre sjekken med f eks cmpl $2147483647, %eax jge ret hvis fib-tallet ligger i eax. Skriver med AT&T-syntaks her. Assemblyprogrammering med flyttall har jeg ikke vært borti. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå