#scene.no speed-optimized c-compo - Numerisk integrasjon -------------------------------------------------------- Versjon 1.0 - 22. desember 2003 Eventuelle feil i disse reglene eller i eksempelprogrammet vil bli korrigert og annonsert på #scene.no. - Lag et program som utfører numerisk integrasjon på et vilkårlig uttrykk og skriver ut resultatet til stdout. - Programmet kjøres slik: ./entry "expression" start stop number_of_steps f.eks: ./entry "e^x" 0.0 1.0 100 - Maks lengde på uttrykket som skal evalueres er 42 tegn. Oppførselen til programmet ved uttrykk lengre enn dette er udefinert. - Programmet skal skrive ut resultatet når det er ferdig utregnet. - Resultatet skal skrives ut på formatet %.15e (med f.eks printf). - Det skal brukes minst double precision i utregningene. - Det aksepteres relativ feil i utregningene, ie abs((correct_val - calculated_val)/correct_val) på opptil 10^-10. - Ved feil skal teksten "error" + linjeskift skrives ut til stderr og programmet skal avslutte med returverdi 1. - Divide by zero, overflow og lignende finurligheter skal ikke håndteres. - Maks størrelse på kildekoden er 64k (65536 bytes). Dette inkluderer c-source, assembler-source og eventuelle makefiler/byggeinstruksjoner. - Grammatikken for uttrykkene er: startsymbol -> { } -> "+" | "-" -> { } -> "*" | "/" -> { "^" } -> "(" ")" | Number | | "x" | "e" | "pi" -> "sin" | "cos" | "tan" Number = (("-")? \d+) | (("-")? \d* "." (\d*)? ("E"("-")?\d+)?) (altså sånn ca det som leses av scanf("%lf", &tall)) - Dette er mao grammatikken fra evaluator-compoen utvidet med høyreassosiativ eksponeringsoperator ("^"), funksjonene sin, cos og tan, konstantene e og pi, og variabelen x som vi integrerer med hensyn til. - OBS: Alle ekvivalente grammatikker er tillatt! Hvis du vil skrive noe annet enn en recursive descent-parser, står du fritt til det. Generelle regler ---------------- - Programmet skal kompilere og kjøre korrekt under gcc3+nasm (Cygwin, og Linux) og Microsoft Visual C 6.0 SP5+nasm. - Programmet skal kun fungere på x86-cpuer (AMD Athlon, Intel Pentium 3 og Pentium 4). - Programmet skal skrives i Ansi C og/eller x86 assembler. - All output skal sendes til stdout med mindre det er spesifisert noe annet. - Det er ikke lov å kjøre eksterne programmer fra programmet. - Programmet skal returnere *eksakt* det samme som eksempelprogrammet med mindre annet er spesifisert. - Inline assembler er kun tillatt hvis man bruker #ifdef for å skille mellom gcc og msvc. Det anbefales å bruke nasm. - Hvis det er en konflikt mellom oppførselen definert i reglene og oppførselen i eksempelprogrammet er det eksempelprogrammet som gjelder. Det er fint om folk sier i fra om dette slik at reglene kan bli oppdatert. - Programmet (main) skal returnere 0 ved avslutning og 1 ved feil. - Programmet vil bli kompilert med disse flaggene med mindre annet er spesifisert: msvc: /O2 gcc: -O2 - Hvis programmet består av flere source-filer skal det følge med en makefil for gnu make eller på annen måte instruksjoner på hvordan man skal kompilere programmet. - Det er ikke tillatt å kreve andre verktøy enn kompilatoren/assembleren/linkeren/gnu make ved bygging av programmet. - Kun kode lagd av en selv kan benyttes, bortsett fra eksempelsourcen (dvs man kan ta utgangspunkt i eksempelet). Deadline -------- - Deadline er søndag 4. januar 2004 kl 1900. - Alle bidrag skal mailes til compo@darkside.no - Bidraget skal leveres .zip, .rar, .tar.gz, .tar.bz2, .gz eller .bz2 - Bidrag som bryter en eller flere av reglene blir diskvalifisert. Bedømming --------- - Alle bidrag blir testet på disse maskinene. - Intel Pentium 4 2.53 GHz - Intel Pentium 3 866 MHz - AMD Athlon XP ? MHz (TBA) - time vil bli brukt til å teste alle programmene, og user-tiden er den som er gjeldende. - Programmene vil bli bedømt av en jury bestående av: - Geir Bjerke (neon) - Rune Holm (titanstar) - Siden juryen ikke har lyst å bli utestengt fra moroa, har jurymedlemmene anledning til å delta. Dere får bare stole på at vi ikke jukser. :) For spørsmål, feil eller kommentarer, ta kontakt med _neon_ eller titanstar på #scene.no, evt send en mail til geir@bjerke.org.