Nepřesnost desetinných čísel – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nepřesnost desetinných čísel – Pascal – Fórum – Programujte.comNepřesnost desetinných čísel – Pascal – Fórum – Programujte.com

 

tom*p0
Stálý člen
28. 2. 2009   #1
-
0
-

Mám následující program:

program desc;

uses crt;
var zacatek, konec, krok, x: double;

begin
clrscr;

zacatek:=-1;
konec:=1;
krok:=0.2;

x:=zacatek;
while x <= konec do begin
x := x + krok;
writeln(x);
end;

readln;
end.


Očekávaný výstup jsou čísla od -1 do 1 po 0.2. Jenže problém je u nuly. Místo toho, aby byla vypsána skutečná nula, je to nějaké číslo krát 10^(-16), čili nějaké hrozně malé číslo. Potřebuji přesná čísla, protože například skutečnou nulou nevydělím, ale tímto číslem ano.

Jak to vyřešit?

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
KIIV
~ Moderátor
+43
God of flame
28. 2. 2009   #2
-
0
-

v pocitaci neexistuje presne desetinne cislo... muzes nicmene zaokrouhlovat

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Quiark0
Věrný člen
28. 2. 2009   #3
-
0
-
Nahlásit jako SPAM
IP: 193.86.140.–
KIIV
~ Moderátor
+43
God of flame
28. 2. 2009   #4
-
0
-

To Quiark : nebo si me privedl na myslenku pouzit cely cisla .. akorat pred vypsanim to vydelit 10x

podobne to pouzivam v jednocipech... precijen celociselna aritmetika je mnohem rychlejsi

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Quiark0
Věrný člen
28. 2. 2009   #5
-
0
-

To ale potom nemáš floating point :)

Nahlásit jako SPAM
IP: 193.86.140.–
KIIV
~ Moderátor
+43
God of flame
28. 2. 2009   #6
-
0
-

To Quiark : to uz zalezi na tom na co potrebuje ten floating point... pokud chce presnost tak je to lepsi :D

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tom*p0
Stálý člen
28. 2. 2009   #7
-
0
-

Potřebuju to na kreslení grafů, a tím pádem na desetinných místech celkem záleží.
V Pascalu asi není pořádná funkce na zaokrouhlení, pouze jednoduché round. Jak tedy správně zaokrouhlit, abych zase nedostal nepřesné číslo? Mám pocit, že když použiju nějaké běžné operace, že to zas nebude přesné...

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
KIIV
~ Moderátor
+43
God of flame
28. 2. 2009   #8
-
0
-

jestli to vykreslujes tak stejne mas nejvetsi presnost na jeden pixel... tim to ze bude nula o 1e-16 vedle je asi vcelku jedno.. stejne to zaokrouhlis na cele jednotky tj round je akorat

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tom*p0
Stálý člen
28. 2. 2009   #9
-
0
-

A co když chci třeba graf funkce x/x? Chci tam ten chybějící pixel pro nulu. Nebo graf funkce signum...

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
KIIV
~ Moderátor
+43
God of flame
28. 2. 2009   #10
-
0
-

to si musis osetrit treba vyjimkou... kdyz to nejde tak proste vynechas

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tom*p0
Stálý člen
28. 2. 2009   #11
-
0
-

Ano, to také mám v plánu, jenže pokud nebude argumentem pravá nula, nepůjde to.

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
KIIV
~ Moderátor
+43
God of flame
28. 2. 2009   #12
-
0
-

To tom*p : no jak rikam da se pouzit krokovani pomoci celych cisel... kdyz das -100 .. 100 a pokazdy to vydelis 5.0 ... tak vyjde -20, -19.8 .... a melo by to byt presnejsi

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tom*p0
Stálý člen
28. 2. 2009   #13
-
0
-

Když nad tím přemýšlím podruhé, asi to bude nejlepší řešení. :)

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý