1 van 1
Numeriek exacter dan exact?
Geplaatst: zo 01 mar 2009, 21:47
door Civilo
Goede(dagdeel),
Ik heb onlangs een vrij "zware" exacte oplossing voor een vergelijking geprogrammeerd in c#. Tijdens een controle van een het programmaatje kwam ik er achter dat de door het programma gevonden oplossingen afwijken, zij het miniem, van de juiste waarden. Voorbeeldje: ik zocht naar een snijpunt tussen twee vergelijkingen, waarvan ik zeker wist dat dit op x = 50 ligt. Mijn programma geeft echter x = 50.000016.
Dit is op zich niet storend, de fout is maar klein, maar ik ben bang dat deze kan gaan "doorwerken".
Ik kan natuurlijk met een numerieke oplossing de exacte waarde beter benaderen dan met een exacte oplossing, alleen dit kost meer rekentijd.
Zijn er nog andere oplossingen?
P.S. Alle parameters zijn van het type double.
Bij voorbaat dank.
C
Re: Numeriek exacter dan exact?
Geplaatst: zo 01 mar 2009, 22:11
door Vladimir Lenin
Nou het probleem met programmeren is dat een exact getal op een computer niet bestaat. Pi bestaat niet op een computer weliswaar is een computer makkelijk in staat om op een tiental decimalen nauwkeurig te rekenen, maar daarmee houdt het ook op. Je zal dus vrede moeten nemen met dergelijke afwijkingen. Dat heeft niets met C# te maken, elke taal maakt dezelfde blunders wat dat betreft. Nu de oplossing: Er bestaan types die een hogere preciese garanderen, ik denk dat je (aan de afwijking te zien) een float gebruikt. Indien je de precisie preciesie wil uitbreiden kan je een double gebruiken of indien het nog exacter moet misschien een decimal. Of je kan ook zoeken op internet naar types die door programmeurs zelf geschreven zijn, die nog hogere preciese garanderen.
PS. Hoe staat het eigenlijk met C#. (zie leren programmeren)
edit: heb nu pas gezien dat je de double vermeld had.
Re: Numeriek exacter dan exact?
Geplaatst: ma 02 mar 2009, 11:21
door PeterPan
Zo'n grote afwijking wijst op een programmeerfout.
Re: Numeriek exacter dan exact?
Geplaatst: ma 02 mar 2009, 12:14
door Bart
Zo'n grote afwijking wijst op een programmeerfout.
Tenzij de vergelijking iteratief is opgelost.
Re: Numeriek exacter dan exact?
Geplaatst: ma 02 mar 2009, 12:49
door Vladimir Lenin
Het kan maar ikzelf gebruik soms newtons methode en zo'n grote fout heb ik nog niet meegemaakt
Re: Numeriek exacter dan exact?
Geplaatst: ma 02 mar 2009, 13:18
door dirkwb
Tenzij de vergelijking iteratief is opgelost.
Inderdaad het gaat dus om de numerieke methode die je toepast en deze heeft een discretisatiefout...
Re: Numeriek exacter dan exact?
Geplaatst: ma 02 mar 2009, 22:00
door Civilo
Nope geen programmeerfout. Dit soort fouten komt ook vaak bij excel voor wanneer je in een enkele formule veelvuldig goniometrische functies gebruikt. In combinatie met machtvereffenen kan de onnauwkeurigheid flink oplopen.
Tovarishch Lenin, wat betreft het leren van programmeren: ik stel steeds een doel waar ik naar toe werk, ik leer on the fly. Het is natuurlijk niet de juiste methode maar het werkt voor mij. Ik merk dat ik qua theorie nog wat tekortschiet, dat ben ik nu beetje bij beetje aan het oppakken.
Ik krab natuurlijk alleen nog maar het oppervlak op het moment, maar ik begin wel steeds vaker voor me te zien hoe ik iets kan oplossen in c#.
Gr. C
Re: Numeriek exacter dan exact?
Geplaatst: ma 02 mar 2009, 22:53
door Bart
Het kan maar ikzelf gebruik soms newtons methode en zo'n grote fout heb ik nog niet meegemaakt
De fout in Newton's methode hangt nog altijd af van de convergentievoorwaarde die je stelt.
Re: Numeriek exacter dan exact?
Geplaatst: di 03 mar 2009, 08:08
door EvilBro
ik zocht naar een snijpunt tussen twee vergelijkingen
Kun je de vergelijkingen geven?
Re: Numeriek exacter dan exact?
Geplaatst: di 03 mar 2009, 11:38
door jhnbk
Mogelijk kan nauwkeuriger maar trager werken door een decimal te gebruiken.
Re: Numeriek exacter dan exact?
Geplaatst: di 03 mar 2009, 14:39
door thermo1945
Vaak werken afgeronde tussenafwoorden cumulatief door.
Re: Numeriek exacter dan exact?
Geplaatst: di 03 mar 2009, 23:31
door Vladimir Lenin
Civilo schreef:Tovarishch Lenin, wat betreft het leren van programmeren: ik stel steeds een doel waar ik naar toe werk, ik leer on the fly. Het is natuurlijk niet de juiste methode maar het werkt voor mij. Ik merk dat ik qua theorie nog wat tekortschiet, dat ben ik nu beetje bij beetje aan het oppakken.
Ik krab natuurlijk alleen nog maar het oppervlak op het moment, maar ik begin wel steeds vaker voor me te zien hoe ik iets kan oplossen in c#.
Wat betreft de juiste methode volgens mij bestaat er geen, zelf ben ik analoog begonnen, en gaandeweg de technologie vergroot, zoals DirectX, Eigen GUI,... volgens mij is het juist de manier om te leren programmeren, je stuit immers altijd weer op nieuwe problemen, waarop je een antwoord dient te zoeken. Ik denk dat een dergelijk methode juist één van de beste is.
Dit natuurlijk geheel terzijde van de topic.