J'ai rencontré un problème avec _controlfp_s (Visual Studio 2008), ou je l'ai compris. Je pensais que le premier paramètre out renvoyait les indicateurs de contrôle avant que les changements des autres paramètres soient appliqués. Il semble qu'il renvoie les drapeaux après le changement.Il est possible qu'un bug dans _controlfp_s ne rétablisse pas correctement le mot de contrôle
Alors, je pensais que la bonne façon de l'utiliser était comme ça:
// Chop rounding
unsigned int old;
_controlfp_s(&old, _RC_CHOP, _MCW_RC);
// Do chopped math
// Restore
unsigned int unused;
_controlfp_s(&unused, old, _MCW_RC);
Malheureusement je dois faire:
// Save
unsigned int old1;
_controlfp_s(&old1, 0, 0);
// Chop rounding
unsigned int old2;
_controlfp_s(&old2, _RC_CHOP, _MCW_RC);
// Do chopped math
// Restore
unsigned int unused;
_controlfp_s(&unused, old1, _MCW_RC);
Ai-je raté quelque chose? Cela semble assez stupide d'avoir à faire ça. J'ai signalé cela à MS qui a dit qu'ils ne pouvaient pas le comprendre et j'ai suggéré de fournir une vidéo montrant le problème. Oui en effet.
Brad
A _video_? C'est riche. –
J'ai éclaté de rire à la partie vidéo. Le +1 est en partie pour cela, haha. Aussi, oui, cela semble stupide, peut-être pour des raisons de performance. Peut-être que _controlfp_s ne modifie pas le premier param if mask! = 0, et vous pouvez passer la même référence. Ça vaut le coup je suppose – zildjohn01
Eh bien, si vous n'aimez pas le faire de cette façon, vous pouvez toujours le faire moins facilement en écrivant un assemblage en ligne. –