/ / Pri výpočte aritmetiky znamená, aký spôsob súčtu je presnejší? - s plávajúcou desatinnou čiarkou, priemer, presnosť, priemer, ieee-754

Pri výpočte aritmetických prostriedkov, aký spôsob sumácie je presnejší? - plovoucí bod, priemer, presnosť, priemer, ieee-754

Vzhľadom na úlohu vypočítať aritmetický priemer n IEEE 754 dvojitá presnosť s plávajúcou desatinnou čiarkou X0, X1, ..., Xn - 1, je to presnejšie

(ksumja Xja) / n

(t.j. najskôr robí Kahan-súčet všetkých Xja a potom delením n) alebo

ksumja (Xja / n)

(t.j. prvé rozdelenie Xja podľa n a potom Kahan-sčítanie)?

Moje vlastné testy (s rovnomerne rozloženým náhodným výberom)čísla v [0, 1] a normálne rozdelené čísla v celom rozsahu čísel s plávajúcou desatinnou čiarkou v strede 0 s σ = 1 boli nepresvedčivé, čo dokazuje, že obidve sú veľmi presné, ale moja voľba testovacích údajov mohla byť obzvlášť slabá.

odpovede:

7 pre odpoveď č. 1

Sumu najprv, potom rozdeliť. Ak sa rozdelíte na prvé miesto a potom sa sumarizujete vo všeobecnom prípade, zavediete chybu zaokrúhľovania úmernú najväčšiemu summitu magnitúdy, ktorý väčšinou poráža bod sumarizácie Kahan (v prípade katastrofického zrušenia, čo je to, čo „strážite proti svojmu Výsledkom je chyba zaokrúhľovania z rozdelenia).

Sumarizácia najprv má o niečo väčšie riziko neprimeraného prepadu; narábať s že správne by ste zmenšili stupnicu o presnú výkonnosť dvoch, aby sa zabránilo pretečeniu. Je to však dosť zriedkavé a nikdy sa nemusíte obávať, že sa budete starať o dobre prispôsobené údaje.

Konkrétny príklad: zvážte spriemerovanie hodnôt 4503599627370496, -4503599627370498 a 2 v dvojitej presnosti. Aj keď použijete naivný súčet, dostanete presne správny výsledok (0), ak spočítate a potom rozdelíte. Ak rozdelíte a potom spočítate, súčet je presný (podľa Sterbenz "lemma) a napriek tomu je chyba stále veľká, vypočítaný výsledok je -0.08333333333333337 (toto je len z chyby zaokrúhľovania v 4503599627370496/3; -4503599627370498/3 je presná ).