Udostępnij za pośrednictwem


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);
}