Computerarithmetiek

Als x zeer groot is, treedt bij de berekening van √(x + 1) − √x in drijvende komma cancellation op. Welke herschrijving levert het resultaat nauwkeurig op?

  1. ABerekenen als 1 ÷ (√(x + 1) + √x)
  2. BBerekenen als √(x + 1 − x)
  3. C√(x + 1) en √x eerst elk naar dubbele precisie omzetten en dan met dezelfde formule aftrekken
Antwoord en toelichting tonen

Antwoord: A. Berekenen als 1 ÷ (√(x + 1) + √x)

√(x + 1) en √x zijn bijna gelijk, dus bij rechtstreeks aftrekken heffen de hoogste cijfers elkaar op. Vermenigvuldigt men teller en noemer met √(x + 1) + √x, dan geldt (x + 1 − x) ÷ (√(x + 1) + √x) = 1 ÷ (√(x + 1) + √x); het aftrekken van bijna gelijke getallen verdwijnt en de berekening wordt nauwkeurig. √(x + 1 − x) is 1 en dus als formule onjuist. Overstappen op dubbele precisie verbetert de situatie, maar bij nog grotere x treedt hetzelfde probleem op, zodat het geen fundamentele oplossing is.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Computerarithmetiek

  1. Bij een drijvendekommagetal met enkele precisie verandert het resultaat niet van 100 miljoen (10⁸) wanneer er 1 bij wordt opgeteld. Welke verklaring van dit verschijnsel is juist?
  2. Wat is het doel van de Kahan-sommatie (opteller met correctie) die wordt gebruikt bij het optellen van veel drijvendekommagetallen?
  3. Wat is het juiste voordeel van de FMA-instructie (fused multiply-add) bij de berekening van a × b + c?
  4. Wat is de belangrijkste reden dat bfloat16 wordt gebruikt bij het trainen van AI?
  5. Wat is een probleem bij het trainen van een neuraal netwerk met FP16 (halve precisie: 1 teken, 5 exponent, 10 mantissebits) dat wordt aangepakt door de verliesfunctie een aantal keer te vergroten voor de berekening (loss scaling)?