Ach ta kompatibilita

Zpětná kompatibilita může být někdy koulí na noze.

Přesvědčil se o tom i tvůrce Javy trojctihodný James Gosling. Tentokrát nejde o to, že by se mu vymstilo některé rozhodnutí v návrhu jazyka či API. Problémy způsobuje chyba ve výpočtu funkcí sinus a cosinus na platformě x86. Jeho výsledek není mimo interval [-pi/4, pi/4] dostatečně přesný, aby splňoval požadavky normy jazyka Java (popravdě řečeno, ten výsledek může být setsakra nepřesný, pro dost velké hodnoty argumentu to může být třeba -1 namísto +1). Důvodem je nepřesná hodnota transcendentního čísla pí použitá při výpočtu.

Tato chyba způsobuje, že Java používá vlastní algoritmus výpočtu sinu a cosinu. Ten je ovšem podstatně pomalejší než realizace v hardware a Java je za svou přesnost v mnoha benchmarcích bita.

A nyní se dostáváme k nejzajímavější části – kdysi dávno existoval x86 procesor, který počítal trigonometrické funkce korektně (tedy téměř korektně, vymýšlel si podstatně méně než ty ostatní). Jmenoval se K5 a vyrábělo ho AMD. Ve všech budoucích procesorech však AMD implementovalo starou intelskou chybu – nemohlo si dovolit nekompatibilitu. A pokud vám to přijde stejně “na hlavu” jako mně, tak vězte, že své chyby se houževnatě drží i Intel – až na procesory Itanium.

Zdroj: Transcendentální meditace Jamese Goslinga