Z doby svých studií si pamatuji, že datový typ float není moc dobrý na součty. A double je na tom lépe jen o chlup.
Pokud provedu součet čísel od 1 do 200000, tak je součet 20000100000. To je 11 číslic, což float v Javě nezvládne. Nemá dost velké rozlišení, takže začne zaokrouhlovat a ztrácet několik spodních číslic.
Zda k tomu došlo i u příkladu z článku nevím úplně jistě, protože nevím, zda 64bitová Java má float jen 32bitový, nebo také 64bitů (předpokládám, že nikoliv, protože v dokumentaci se odkazuje na float = IEEE 754 Single Precision). Ostatně výsledek výpočtu 100001.3 neodpovídá tomu, co bych jako správný výsledek očekával (průměr od 1 do 200000 je 100000.5)
Uznávám, že na samotný obsah článku to nemá vliv, jen mě překvapilo, že se tu takový příklad objevil.
Je to tak a jsem rad, ze si toho nekdo vsiml (coz znamena, ze u vas na fakulte to asi nekdo vysvetlil, coz kupodivu neni zvykem vsude :-).
U FP obecne neplati napriklad vztah (a+b)-b = a + (b-b) atd., tady to urcite vede k pocetni chybe.
Ja jsem pouzil float[] schvalne, a to z toho duvodu, aby se mohl jak JIT, tak i GCC "vyradit" na pouziti SSE, nicmene neni problem to prepsat na pouziti longu.
Jinak typ float je v Jave vzdy IEEE 754 single, konkretni vysledky operaci se sice mohou lisit, ale to resi modifikator "strictfp".