Compilers

Waarom herordent een compiler onder strikte instellingen de optelling (a + b) + c van floating-pointgetallen niet eigenmachtig tot a + (b + c)?

  1. AOmdat door afrondingsfouten de associatieve eigenschap niet geldt en het resultaat kan veranderen
  2. BOmdat het aantal optellingen bij herordening toeneemt
  3. COmdat de hardware bij optelling van floating-pointgetallen de volgorde automatisch bepaalt
Antwoord en toelichting tonen

Antwoord: A. Omdat door afrondingsfouten de associatieve eigenschap niet geldt en het resultaat kan veranderen

Bij floating-pointberekeningen wordt het resultaat na elke optelling afgerond op de weer te geven cijfers, zodat het resultaat bij een andere volgorde van berekening iets kan veranderen. Als bijvoorbeeld eerst een zeer groot en een klein getal worden opgeteld, verdwijnt het kleine getal door afronding, terwijl het kan blijven bestaan als eerst de kleine getallen onderling worden opgeteld. Een compiler met strikte instellingen behoudt daarom de volgorde. Bij een instelling die verschillen in resultaat toestaat (zoals fast-math) kan voor vectorisatie wel worden herordend. Het aantal optellingen verandert niet.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welk soort instructie wordt gebruikt bij automatische vectorisatie door een compiler?
  2. Welke basisvoorwaarde moet een optimalisatie van een compiler respecteren?
  3. Welke uitspraak over instructieselectie (instruction selection), een van de fasen van codegeneratie, is juist?
  4. Welke uitspraak over een cross-compiler is juist?
  5. Als een met optimalisatie gecompileerd programma met een debugger wordt onderzocht, wordt de waarde van sommige variabelen soms als "niet beschikbaar" weergegeven. Wat is de belangrijkste reden?

Vergelijkingen bij dit onderwerp