Udostępnij za pośrednictwem


Ostrzeżenie C4738 kompilatora (poziom 3)

przechowywanie wyników 32-bitowych zmiennoprzecinkowych w pamięci, możliwej utracie wydajności

C4738 ostrzega, że wynik przydziału, oddanych, przekazany argument lub innych operacji może być konieczne zaokrąglone lub że operacja zabrakło rejestrów i potrzebne do korzystania z pamięci (rozlania).Może to spowodować utratę wydajności.

Aby rozwiązać to ostrzeżenie i uniknąć zaokrąglania, kompilacji z /fp:fast lub doubles zamiast floats.

Aby rozwiązać to ostrzeżenie i uniknąć braku rejestrów, zmienić kolejność obliczeń i zmodyfikować korzystanie z inline

To ostrzeżenie jest domyślnie wyłączona.Aby uzyskać więcej informacji, zobacz Kompilator ostrzeżenia czy są wyłączone domyślnie.

Przykład

Poniższy przykład spowoduje wygenerowanie błędu 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);
}