Как вы, несомненно, отметили, нет стандартного способа сделать это (в этом отношении стандартного определения «флеш-ноль» не существует, ни каких-либо требований, которые оно реализует). Таким образом, все средства для этого связаны с платформой. Для того, чтобы добавить немного больше к списку, так как это полезная ссылка:
OSX/Intel: fesetenv(_FE_DFL_DISABLE_SSE_DENORMS_ENV)
. Обратите внимание, что этот только эффекты арифметические сделаны в float
или double
, что делается с использованием SSE2 (отсюда и название); long double
арифметика выполняется с использованием устаревших инструкций x87, которые не поддерживают промывку.
iOS/arm: в 32-битном ARM под iOS режим по умолчанию - режим по умолчанию. Вы можете повернуть его с для инструкций VFP (но не для NEON), очистив бит __fpscr_flush_to_zero
в объекте fenv_t
и установив эту среду с помощью fesetenv()
.
iOS/arm64: fesetenv(_FE_DFL_DISABLE_DENORMS_ENV)
.
округло-нулевой и флеш-ноль имеют совершенно другую семантику. –
Спасибо за функцию Solaris, которая делает то, что мне нужно ... но я думаю, что остальная часть вашего ответа смущает режим округления и flush-to-zero –