Vlákno názorů k článku Pohled pod kapotu JVM – přednosti a zápory využití JNI při optimalizacích (3) od Karel - Z doby svých studií si pamatuji, že datový...

  • Článek je starý, nové názory již nelze přidávat.
  • 19. 11. 2013 12:57

    Karel (neregistrovaný)

    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.

  • 19. 11. 2013 14:59

    Pavel Tišnovský
    Zlatý podporovatel

    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".