Změna hodnoty čísla při použití fce sscanf() – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Změna hodnoty čísla při použití fce sscanf() – C / C++ – Fórum – Programujte.comZměna hodnoty čísla při použití fce sscanf() – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
10. 7. 2016   #1
-
0
-

Ahoj,

mám takovíto problém: Ze souboru nacitam hodnoty z mereni :

printf("\nNacetl jsem:\n");
fseek(vstupniData,0,SEEK_SET);/*PRESUN KURZORU NA ZACATEK SOUBORU*/
i=0;
while(!feof(vstupniData))
   {
   fgets(radek,MAX,vstupniData);
   sscanf(radek, "%f%f", &data[i].x, &data[i].fx);
printf("x\t%f, fx\t%f\n",data[i].x,data[i].fx);
i++;	
   }

data jsou v souboru ve formě :hodnota x mezera hodnota fx enter.

takže načítám vždy celý řádek a pote si pomoci fce sscanf vyberu sva čísla a ukladam do pole data (struktura: typedef struct {float x; float fx;} DATA; )

problem je v tom, že když je v souboru hodnota 19.30 tak se uloží 19.299999 nebo když je tam 18.12 tak se uloží 18.120001 

Co s tím? Prosím :)

Nahlásit jako SPAM
IP: 188.175.234.–
Řešení
10. 7. 2016   #2
-
0
-
Vyřešeno Nejlepší odpověď

No rovnou si i sam odpovím :D stačilo zvolit jiný datový typ: float-> double a %f -> %lf 

Nahlásit jako SPAM
IP: 188.175.234.–
Kit+15
Guru
10. 7. 2016   #3
-
0
-

#1 HonzaHonza
To není chyba, ale vlastnost typu float. Při výstupu v printf() stačí místo formátu "%f" použít třeba "%8.2f".

Typ double situaci nijak neřeší, pouze posouvá odchylku o několik řádů dál. Pro většinu měřených dat zcela zbytečně.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10. 7. 2016   #4
-
0
-

#3 Kit
No me ani tak nejde o to co se tiskne, ale o to, co je v pameti.. s tím totiž provádím další výpočty, při kterých se ta chyba ukáže. %8.2f problem neřeší jen ho maskuje.

a mé řešení s double taky neni zrovna nej protože mi to sice načte data ale v další čášti programu, ktera vyžaduje float to zase spadne.. 

Nahlásit jako SPAM
IP: 188.175.234.–
Kit+15
Guru
10. 7. 2016   #5
-
0
-

#4 HonzaHonza
Pokud máš v datech naměřených s přesností na 2 desetinná místa chybu na 6. desetinném místě a tato chyba ti ovlivní výsledek, máš asi totální binec ve zpracování těchto dat a měl bys to celé předělat.

V těch vzorečcích totiž musíš mít podchycenu i systematickou chybu měření. Pokud je například 1%, nemůžeš očekávat, že přesnost výpočtu bude vyšší. Když se nad tím zamyslíš, tak pokud nepočítáš délku dráhy Země kolem Slunce s přesností na centimetry, tak ti float bohatě stačí. Existuje jen jedna fyzikální veličina, na kterou float nestačí. Hádej která...

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 29 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ý