Tak FP umí přinášet zajímavé pasti. Pořád mi připadá, že se to na univerzitách stále dost ignoruje; potom na projektech vidím, že se FP používá jako reálná čísla. To ale není pravda, vůbec to nesplňuje spoustu vlastností reálných čísel.
Asi nejlepší je volba špatných násobků u jednotek v metrickém systému. To je čistý fail prakticky od začátku.
Připomíná mi to jeden problém, který se řešil před asi 15 lety na Aldebaranu a ukázal se značně netriviální kvůli zmiňovaným problémům - autor se jestli si dobře vzpomínám pokoušel simulovat nějaký složitější systém, ten mu dával zjevné nesmysly, tak postupně dospěl až k úplně primitivní numerické simulaci oběhu jediné planety kolem hvězdy podle Newtonovy mechaniky, a pořád nepříliš snadný problém, jak vůbec dosáhnout toho, aby se po oběhu planeta vracela do stejného místa se stejným vektorem rychlosti.
jakou používal integrační metodu?
(protože to spíš vypadá na nestabilní numerický výpočet)
btw toto je zajímavé video https://www.youtube.com/watch?v=nCg3aXn5F3M
25. 2. 2026, 20:59 editováno autorem komentáře
Díky za super článek.
Říkám si, že některé ty optimalizace by mohl překladač udělat, i když o to není žádán. Například nastavování errno - tam je přece většinou vidět, zda hned po té operaci program čte errno. Anebo zda dělá něco jiného, co by to errno mohlo zase změnit. Pokud se errno nekontroluje nikde, lze ho bezpečně nenastavovat, ne?
> zda hned po té operaci program čte errno
On ho nemusí číst hned ale třeba o pár úrovní jinde. Tam už překladač nemusí vidět.
A autoři překladačů musí přemýšlet jinak než normální programátoři. Bezpečná optimalizace nesmí změnit chování ani v extrémně obskurních a nepravděpodobných případech. Pokud to errno někdo někde může číst a je nějaká větev, která ho nezmění, tak tam tu hodnotu zapsat musí.
Druhá věc je samozřejmě to, že errno je historický relikt. Je to špatně z mnoha úhlů pohledu, jen se ho nejde jednoduše zbavit.
Skrytější pasti: pokud se s fast-math zkompiluje jedna .so-knihovna, tak to může částečně ovlivnit i výsledky knihovny jiné, jen proto že jsou v nějakém programu (tranzitivně) použity obě. Výborně se to debuguje.
Praktický příklad: https://github.com/jedisct1/libsodium/commit/ad4584d45590654b9d863ced90d2b2561d5cfbda#commitcomment-129441988
Detailnější vysvětlení: https://trofi.github.io/posts/302-Ofast-and-ffast-math-non-local-effects.html
26. 2. 2026, 06:58 editováno autorem komentáře