Portál AbcLinuxu, 8. května 2025 11:31
Tiskni
Sdílej:
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
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
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.
Microsoft taktez. Co inovativniho Microsoft prinesl? Vzdyt po technicke strance perfektni kernel NT (postaveny ex-VMS vyvojari) dokazal zmrvit...Co BASIC pro Altair?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.