Avertissement du compilateur (niveau 3) C4738
stockage de résultat flottant 32 bits en mémoire, perte possible de performances
C4738 avertit que le résultat d’une affectation, d’un cast, d’un argument passé ou d’une autre opération peut avoir besoin d’être arrondi ou que l’opération a expiré de registres et qu’elle doit utiliser la mémoire (déversement). Cela peut entraîner une perte de performances.
Pour résoudre cet avertissement et éviter l’arrondi, compilez avec /fp :fast ou utilisez double
au lieu de float
.
Pour résoudre cet avertissement et éviter de manquer de registres, modifiez l’ordre du calcul et modifiez votre utilisation de l’incorporation
Cet avertissement est désactivé par défaut. Pour plus d'informations, consultez Compiler Warnings That Are Off by Default.
Exemple
L’exemple suivant génère l’erreur C4738 :
// C4738.cpp
// compile with: /c /fp:precise /O2 /W3
// processor: x86
#include <stdio.h>
#pragma warning(default : 4738)
float func(float f)
{
return f;
}
int main()
{
extern float f, f1, f2;
double d = 0.0;
f1 = func(d);
f2 = (float) d;
f = f1 + f2; // C4738
printf_s("%f\n", f);
}