Единственная документация, которую я могу найти (на MSDN или иначе) то, что вызов к _fpreset()
"сбрасывает пакет с плавающей точкой". Каков "пакет с плавающей точкой?" Это также очищает слово состояния FPU? Я вижу документацию, в которой говорится для вызова _fpreset()
когда восстановление с SIGFPE, но не делает _clearfp()
это также? Я должен назвать обоих?
Я работаю над приложением, которое размаскировало некоторые исключения FP (использование _controlfp()
). Когда я хочу сбросить FPU к состоянию по умолчанию (скажите при вызове в код.NET), должен я просто звонить _clearfp()
, _fpreset()
, или оба. Это - производительность критический код, таким образом, я не хочу называть обоих, если я не имею к...
_fpreset ()
сбрасывает состояние модуля с плавающей запятой. Он сбрасывает точность FPU на значение по умолчанию , а очищает слово состояния FPU. Два случая, когда я вижу, чтобы использовать его, - это при восстановлении из FPE (как вы сказали) и при возвращении управления из кода библиотеки (например, DLL, над которой вы не контролируете), который каким-либо образом прикрутил FPU, например, изменение точность.