Portál AbcLinuxu, 14. listopadu 2025 14:42
.
btw, ta chyba nie je syntakticka, ale vychadza z architektury pocitacov (lubovolneho pocitaca)
btw, ta chyba nie je syntakticka, ale vychadza z architektury pocitacov (lubovolneho pocitaca)Nechtěl jsem o tom psát, ale tohle je přesně odpověď, která ukazuje, jak je tento problém ošidný. Pokud bych měl implementaci jazyka C, která ukládá čísla v plovoucí desetinné čárce jako BCD, pak program skončí v konečném čase.
0.010000 != 0.01
float x místo
if (x != 0.01)by mělo být
if (x > 0.01-delta && x < 0.01+delta)kde
delta se vhodně zvolí podle typu výpočtu, způsobu reprezentace float atd.
V tomto konkrétním příkladě by nejspíš bylo delta = 0.005 a
while (x < 0.01 + delta)V tomhle konkrétním příkladu jde ale hlavně o nevhodné použití
float, mělo by se použít buď int a desetinou čárku posunot až pro výpis, nebo použít nějaký typ s pevným počtem desetinných míst (v Javě třeba BigDecimal). Float není typ pro necelá čísla, ale pro nepřesnou reprezentaci reálných čísel. Racionální čísla (zlomky) je lepší reprezentovat jinak (zvlášť pokud s nimi chci dál pracovat) – kór u desetinných zlomků (jako je to v tomto případě), kdy mám podporu většinou už v programovacím jazyce, nebo se stejně jedná jen o posouvání desetinné čárky.
if ( abs(x - 0.01) < delta )
kde delta bude nějaká rozumně malá hodnota (0.0001).
if ((x + delta) <= 0.01)
(aby se to zastavilo "urcite" po podjeti 0.01)
2*10e+2 == 20*10e+1
Na druhou stranu, varování před tímto chováním (chyba není asi to správné slovo) jsem ještě v žádné učebnici nebo tutorialu neviděl.
. Je to asi tim, ze jsem se zacinal ucil programovat take uz vlastne vice nez pred 20 lety.Dokonce si matne pamatuju, ze napr. cislo 0.1 (nula cela jedna) nam prednasejici v prvaku na VS vyslovne uvadel jako priklad toho, ze zdanlive jednoduche veci se v pohyblive radove carce nedaji mnohdy presne vyjadrit (vicemene na tom demonstroval nejcastejsi zpusob ulozeni realnych cisel v pocitaci). Vsem komu to neni jasne doporucuju vzit si tuzku a papir, zvolit si nejakou presnost a zkusit si napsat, jak bude vypadat normalizovana binarni mantisa toho cisla. Pak tu presnost zvysit a jeste jednou a tak dale a tak dale...
). Problém je, že si fakt nedokážu představit, kde bych se to dneska naučil. Dřív to nebyl problém, ale dnes je důležité na programování hlavně to, aby v tom bylo XML a objekty. Pak je to to správné programování.
P.S.: Nemám nic proti XML a objektům, sám obojí intenzívně používám, ale je zásada, že technologie je prostředek nikoli cíl.
(Někde jsem viděl i brutálnější příklad, ale teď ho nemůžu najít.
)
Problém je, že si fakt nedokážu představit, kde bych se to dneska naučil.MFF. Ovšem něco za něco
.
V tuhle chvíli už neřeknu, jestli jsem tu chybu zpozoroval za dve nebo tři sekundy, ale rozhodně skoro okamžitě.
Pokusím se najít jeden záludnější příklad, ten by si tam mohli dát, pokud by šli po expertech...
lenze vsetky tieto http servery su na jedno kopytoTo je samozřejmě blbost. Jen když srovnám třeba Tuxe a Apache, to jsou naprosto odlišné servery. A silně pochybuji o tom, že neexistuje takový, který by Seznamu nevyhověl.
man pollVím, co máš na mysli. Ovšem to si uvědomují i tvůrci existujících serverů a třeba tohle je jedno z řešení. Ale psát to kvůli tomu "from scratch", no, to už bych si hodně rozmyslel.
trefa do cerneho

































































































































































































































































Myslím si, že ve většině případů nadělá lemmatizace víc škody než užitku (pokud nejde vypnout). Pomůže spíš těm, kteří nevědí přesně, co vlastně hledají. Jinak snižuje relevanci výsledků.
Každopádně, Seznam teď vyvíjí nový fulltext, tak se to třeba zlepší.
Microsoft taktez. Co inovativniho Microsoft prinesl? Vzdyt po technicke strance perfektni kernel NT (postaveny ex-VMS vyvojari) dokazal zmrvit...Co BASIC pro Altair?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.