RSS registrovat login
Navigace: předchozí stranaúvodní strana
Problémy s reálnými čísly

Zde je takový seznam doporučení a nejčastějších problémů i chyb, kterých se začátečníci dopouští při práci s reálnými čísly

Omezená přesnost

typický dotaz:
Mam deklarovanou proměnnou a:single s přiřazenou hodnotou např. 6. Když provedu a:=a/10, tak nedostanu 0.6 ale 0.60000002384. V čem je problém?

Problém je v tom, že reálná čísla v PC mají omezenou přesnost (používá se např. 64bitů), takže vznikají chyby na nejnižších řádech, dělat se s tím nic moc nedá... V některých jazycích jsou datové typy se zaručenou přesností (např. decimal v databázích, C# atd), v Delphi by na to měl sloužit typ Currency

Porovnání čísel

typický dotaz:
Mám podmínku if a=b then .... a nikdy se neprovede, i když jsou ty čísla stejný

Je to opět způsobeno omezenou přesností, takže i když se jedná o stejná čísla, na nejnižších řádech budou drobné odchylky. Proto reálná čísla nelze porovnávat na rovnost, ale vždy pouze zjišťovat rozdíl. Shrnul to např. Maartin zde :

bud se testuje absolutni chyba
abs(a-b) < delta
nebo relativni vzhledem k jednomu (kdyz vis co je spravne a chces zkontrolovat druhy vysledek)
abs(a-b) < eps * abs(a)
nebo symetricky
abs(a-b) < eps * min(abs(a), abs(b))
nebo
abs(a-b) < eps * (abs(a) + abs(b))
nebo se dela nejaka kombinace jako treba
abs(a-b) < eps * max(abs(a) + abs(b), delta)

posledni je ekvivaletni k
abs(a-b) < eps * (abs(a) + abs(b)) || abs(a-b) < eps*delta



Na závěr ješte příklad jedné diskuze, kde se o real psalo.

Informace ke stavu builder.cz zde


vytvořil Mi.Chal. 25.11. 2005 20:34, naposledy změněnil Mi.Chal. 25.11. 2005 20:50
přečteno: 3356x

Komentáře:
Žádné komentáře dosud nebyly vloženy.

Přidat komentář:
Jméno
E-mail
Web
Titulek
Obsah
thomas sabo rea mbt outlet thomas sabo charms sale louis vuitton taschen kaufen thomas sabo boutique mbt kaufen