Ostrzeżenie kompilatora (poziom 3) C4738
przechowywanie 32-bitowego wyniku zmiennopozycyjnego w pamięci, możliwa utrata wydajności
C4738 ostrzega, że wynik przypisania, rzutowania, przekazanego argumentu lub innej operacji może być konieczne zaokrąglenie lub że operacja zabrakła rejestrów i musi używać pamięci (rozlanie). Może to spowodować utratę wydajności.
Aby rozwiązać ten problem i uniknąć zaokrąglania, skompiluj polecenie za pomocą polecenia /fp:fast lub użyj double
polecenia zamiast float
.
Aby rozwiązać to ostrzeżenie i uniknąć braku rejestrów, zmień kolejność obliczeń i zmodyfikuj użycie tworzenia
To ostrzeżenie jest domyślnie wyłączone. Aby uzyskać więcej informacji, zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone.
Przykład
Poniższy przykład generuje 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);
}