abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 22:33 | Komunita

Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL). Dnešním dnem je novým vedoucím Sam Hartman.

Ladislav Hagara | Komentářů: 3
včera 22:11 | Nová verze

Po čtyřech měsících od vydání verze 5.5 byla vydána verze 5.6 svobodného multiplatformního softwaru pro konverzi a zpracování digitálních fotografií primárně ve formátů RAW RawTherapee (Wikipedie). Nová verze RawTherapee je k dispozici také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

Ladislav Hagara | Komentářů: 0
včera 00:22 | Nová verze

Byla vydána verze 1.0 svobodné multiplatformní závodní hry SuperTuxKart (STK). Přehled novinek v příspěvku na blogu. Zdůraznit lze především víceuživatelský mód umožňující hrát hru po síti. Videoprezentace nejnovější verze na YouTube.

Ladislav Hagara | Komentářů: 4
20.4. 15:55 | Komunita

Ke zhlédnutí jsou videozáznamy grafických rozhraní telefonů, zatím jenom vývojových desek, Librem 5 a PinePhone. Librem 5 za 649 dolarů by měl být aktuálně k dispozici ve třetím čtvrtletí 2019. Při spuštění kampaně se mluvilo o lednu 2019. PinePhone za 150 dolarů by měl být odesílán ve čtvrtém čtvrtletí 2019.

Ladislav Hagara | Komentářů: 0
19.4. 20:22 | Nová verze

Po dvou měsících vývoje od vydání verze 6.0.0 byla oficiálně vydána nová verze 6.1.0 správce digitálních fotografií a nově i videí digiKam (digiKam Software Collection, Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení. Vývojáři zdůrazňují nové API pro rozšíření DPlugins nahrazující KIPI. Ke stažení je také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

Ladislav Hagara | Komentářů: 0
19.4. 19:55 | Nová verze

Byla vydána verze 1.16.0, tj. první stabilní verze nové řady 1.16, multiplatformního multimediálního frameworku GStreamer (Wikipedie). Z novinek lze zdůraznit vylepšení podpory WebRTC nebo AV1. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
19.4. 11:55 | Nová verze

Po více než 3 letech od vydání verze 1.3.0 byla vydána nová stabilní verze 1.4 multimediálního přehrávače MPlayer (Wikipedie). Nejnovější verze přináší kompatibilitu s verzí 4.1 a také s aktuální vývojovou verzí multiplatformní multimediální knihovny FFmpeg (Wikipedie).

Ladislav Hagara | Komentářů: 15
18.4. 23:55 | Komunita

Mozilla oznámila, že projekt Things byl přejmenován na WebThings. Nové jméno by mělo zdůraznit, že se nejedná pouze o projekt IoT (Internet věcí), ale o WoT (Web věcí). Současně byla vydána WebThings Gateway (GitHub) ve verzi 0.8 pro Raspberry Pi.

Ladislav Hagara | Komentářů: 0
18.4. 21:11 | Nová verze

Byl vydán balík KDE Aplikace ve verzi 19.04. Shrnuje práce za poslední čtyři měsíce: opravy chyb, mj. ve správci souborů Dolphin, prohlížeči dokumentů (nejen PDF) Okular nebo prohlížeči obrázků Gwenview – tyto dostaly např. lepší podporu dotykových obrazovek. Významného přepracování se dočkal editor videa Kdenlive.

Fluttershy, yay! | Komentářů: 3
18.4. 16:22 | Nová verze

Byla vydána verze 19.04 linuxové distribuce Ubuntu a oficiálních odnoží Ubuntu Budgie, Kubuntu, Lubuntu, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Kódový název Ubuntu 19.04 je Disco Dingo. Přehled novinek a odkazy ke stažení v poznámkách k vydání. Ubuntu 19.04 bude podporováno 9 měsíců, tj. do ledna 2020.

Ladislav Hagara | Komentářů: 10
Používáte headset pro virtuální realitu?
 (1%)
 (3%)
 (1%)
 (19%)
 (0%)
 (75%)
Celkem 221 hlasů
 Komentářů: 12, poslední 18.4. 01:19
Rozcestník

Dotaz: Rovnost v céčku

4.11.2018 20:54 Kacka99
Rovnost v céčku
Přečteno: 1694×
Zdravím, potřebovala bych pomoci s rovností.

long double a, b, c, x, y, z;

scanf("%Lf%Lf%Lf%Lf%Lf%Lf", &a, &b, &c, &x, &y, &z);

long double o1, o2;

o1 = a + b + c;

o2 = x + y + z;

if (o1 == o2) printf("obvody jsou stejné");

if (o1 < o2) printf("obvod dva je větší");

no a když zadávám desetinná čísla, tak i když jsou stejné obvody, tak mi to vyhazuje, že obvod dva je větší. U celých čísel to funguje. Prosím tedy o radu, co dělám špatně?

Řešení dotazu:


Odpovědi

4.11.2018 21:11 Kit | skóre: 43 | Brno
Rozbalit Rozbalit vše Re: Rovnost v céčku
Čísla typu float a double se nedají přímo porovnávat na rovnost. Je nutné zpracovat i přesnost porovnání (eps).
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Blaazen avatar 4.11.2018 21:16 Blaazen | skóre: 22 | blog: BL
Rozbalit Rozbalit vše Re: Rovnost v céčku
Protože double nedokáže přesně uložit některé hodnoty, např. místo 4,5 uloží 4,49999999 a někdy to nevyjde.
4.11.2018 21:32 Kacka99
Rozbalit Rozbalit vše Re: Rovnost v céčku
Děkuji moc. A prosím jak to mám tedy udělat?
vencour avatar 4.11.2018 21:50 vencour | skóre: 55 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Rovnost v céčku
Testujte rozdíl obou čísel, že je menší třeba než 10E-5.
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
4.11.2018 22:23 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Rovnost v céčku

Pro jistotu: …že je jeho absolutní hodnota menší…

Ad "třeba než 10E-5": (1) 10E-5 se obvykle píše spíš jako 1E-4 (což je docela dost). (2) U skutečných úloh je odhadování chyb mnohem komplikovanější než že podívám z okna a plácnu od oka nějaké číslo. Tady ale zadání vypadá tak uměle, že to až smrdí domácím úkolem, takže je to asi jedno.

Jendа avatar 5.11.2018 03:14 Jendа | skóre: 75 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Rovnost v céčku
Neměl by ten limit být nějaký zlomek z magnitudy toho čísla? Pro porovnávání 1e-10 a 2e-10 je limit 1e-4 moc, pro porovnávání 1e+20 a 1.1e+20 je málo.
I was just trying to exit Vim and all of this happened!
5.11.2018 05:27 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Rovnost v céčku
To by v praxi znamenalo, že třeba porovnání "a + b == c" a "a == c - b" může dát výrazně odlišné výsledky. Pokud bych to chtěl dělat opravdu pořádně, spíš bych se snažil spočítat horní odhad zaokrouhlovací chyby a použít ten.
4.11.2018 22:24 Luboš
Rozbalit Rozbalit vše Re: Rovnost v céčku
Před porovnání double (nebo float) je třeba rozhodnout, s jakou přesností budou čísla porovnávána.
Řešeno je to např.zde:
Comparing floating point numbers
The following definitions are from The art of computer programming by Knuth:

bool approximatelyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ( (fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}

bool essentiallyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ( (fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}

bool definitelyGreaterThan(float a, float b, float epsilon)
{
return (a - b) > ( (fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}

bool definitelyLessThan(float a, float b, float epsilon)
{
return (b - a) > ( (fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
5.11.2018 01:04 MadCatX | skóre: 22 | blog: dev_urandom
Rozbalit Rozbalit vše Re: Rovnost v céčku
Kdyby to z toho kódu nebylo zřejmé, je důležité hodnotu epsilon škálovat podle toho, jak velká čísla se porovnávají (resp. porovnávané hodnoty normovat). Ten kód samotný je mimochodem trochu hybrid, v klasickém C není bool, v C++ by se zase mělo použít std::abs() místo fabs().
10.11.2018 18:25 luky
Rozbalit Rozbalit vše Re: Rovnost v céčku
C99 neni ani po temer dvaceti letech klasicke C? A jake je tedy to klasicke - C89, K&R...?

Hlavicka stdbool.h musi definovat bool jako _Bool. _Bool je interni typ stene jako treba int.
10.11.2018 19:52 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: Rovnost v céčku
Visual Studio pridalo _Bool s verziu 2013. Čo je púhych 5 rokov dozadu. A poznám ľudí, ktorí sa ešte nepohli za C98 ... všetko novšie považujú za nepotrebné "panské huncútstvo" a chvíľkový ošiaľ, ktorému sa neoplatí venovať čas ... do čerta, musím si ísť zapiť depku ... :-(
10.11.2018 22:42 debian+
Rozbalit Rozbalit vše Re: Rovnost v céčku
Co z C98? Hm, dvojriadkove komentare, snprintf(), UTF16 (ktoru som nikdy v zivote nevyuzil). Strnlen bola pridana neskor. A mozno nejake fun.

Kto ma rad C, bool zrejme az tak nefandi.
10.11.2018 21:39 MadCatX | skóre: 22 | blog: dev_urandom
Rozbalit Rozbalit vše Re: Rovnost v céčku
Uvedený snippet neříká, že by se mělo includovat stdbool.h a protože jde zřejmě o začátečnický dotaz, přišlo mi vhodné na to upozornit. Co se podpory C99 týče, třeba MSVC úplnou podporu standardního C99 pořád nemá.
5.11.2018 06:19 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Rovnost v céčku
To by např. znamenalo, žeessentiallyEqual(a, 0, epsilon) bude totéž co "a == 0" a pro epsilon < 1 i approximatelyEqual(a, 0, epsilon).
5.11.2018 10:25 MadCatX | skóre: 22 | blog: dev_urandom
Rozbalit Rozbalit vše Re: Rovnost v céčku
Což může být žádoucí, protože "skoro nula" a "úplně nula" je v některých případech zásadní rozdíl. V opačném případě je třeba porovnání vůči nule ošetřit zvlášť.
5.11.2018 11:23 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Rovnost v céčku
Ten problém se netýká jen nuly, na té je to jen názornější. Chyba je v samotném předpokladu, že velikost zaokrouhlovací chyby poznám z čísla samotného a nepotřebuji vědět, jak jsem k němu došel. Pokud bych chtěl jít touhle cestou, musel bych si u každé číselné hodnoty udržovat i informaci o její (ne)přesnosti a tu dopočítávat i při každé aritmetické operaci.
5.11.2018 10:37 sad
Rozbalit Rozbalit vše Re: Rovnost v céčku
Já bych zkusil desetinná čísla převést na řetězce pomocí funkce sprintf, sprintf je podobná funkce jako printf, s tím zásadním rozdílem, že proměnné nevypisuje na monitor, ale zapisuje je do řetězce.

Zde je její tvar. Jak vidíš, tak prvním argumentem, je řetezec, do kterého budeš zapisovat ono číslo. Formátovací řetězec bys mohla mít třeba pro dvě desetinná místa, takže "%.2Lf", a poté jen řetězce porovnáš funkcí strcmp.
5.11.2018 15:36 Tomáš
Rozbalit Rozbalit vše Re: Rovnost v céčku

Z https://bitbashing.io/comparing-floats.html

bool relativelyEqual(float a, float b,
    float maxRelativeDiff = FLT_EPSILON)
{
    const float difference = fabs(a - b);

    // Scale to the largest value.
    a = fabs(a);
    b = fabs(b);
    const float scaledEpsilon =
        maxRelativeDiff * max(a, b);

    return difference <= scaledEpsilon;
}
13.11.2018 21:15 Kacka99
Rozbalit Rozbalit vše Re: Rovnost v céčku
Ahoj, všem moc díky. Porovnala jsem to s epsilon a šlo to. :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.