float_control
specifica il comportamento a virgola mobile per una funzione.
float_control( value,setting [push] | push | pop )
Flag
value,setting**[push]**
specifica il comportamento a virgola mobile.value può essere preciseo except.Per ulteriori informazioni, vedere /fp (Specifica il comportamento della virgola mobile).setting può essere ono off.se value viene precise, le impostazioni per precisee exceptvengono specificate.exceptla proprietà può essere impostata solo a onquando preciseinoltre è impostato su on.
Se l'elemento facoltativo pushil token viene aggiunto, l'impostazione corrente per value viene inserito su nello stack interno del compilatore.
push
Richiedere all'oggetto corrente float_control impostazione sullo stack interno del compilatorepop
rimuovefloat_control l'impostazione dall'inizio dello stack interno del compilatore e modo che il nuovo float_control impostare.
Note
Non è possibile disattivare float_control precise da a except è attivata.Analogamente, precise non può essere o fuori da l fenv_access è attivata.Per passare dal modello rigido a un modello veloce con float_control il pragma, utilizzare il codice seguente:
#pragma float_control(except, off)
#pragma fenv_access(off)
#pragma float_control(precise, off)
// The following line is needed on Itanium processors
#pragma fp_contract(on)
Per passare dal modello veloce a un modello rigido con float_control il pragma, utilizzare il codice seguente:
#pragma float_control(precise, on)
#pragma fenv_access(on)
#pragma float_control(except, on)
// The following line is needed on Itanium processors.
#pragma fp_contract(off)
Altri pragma a virgola mobile sono:
Esempio
Di seguito viene illustrato come rilevare un'eccezione a virgola mobile di overflow utilizzando pragma float_control.
// pragma_directive_float_control.cpp
// compile with: /EHa
#include <stdio.h>
#include <float.h>
double func( ) {
return 1.1e75;
}
#pragma float_control (except,on)
int main( ) {
float u[1];
unsigned int currentControl;
errno_t err;
err = _controlfp_s(¤tControl, ~_EM_OVERFLOW, _MCW_EM);
if (err != 0)
printf_s("_controlfp_s failed!\n");
try {
u[0] = func();
printf_s ("Fail");
return(1);
}
catch (...) {
printf_s ("Pass");
return(0);
}
}