Compilers
Waarom herordent een compiler onder strikte instellingen de optelling (a + b) + c van floating-pointgetallen niet eigenmachtig tot a + (b + c)?
- AOmdat door afrondingsfouten de associatieve eigenschap niet geldt en het resultaat kan veranderen
- BOmdat het aantal optellingen bij herordening toeneemt
- 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.