Condividi tramite


Avviso del compilatore (livello 3) C4738

archiviazione in memoria del risultato float a 32 bit, possibile riduzione delle prestazioni

L'avviso C4738 viene visualizzato per segnalare che può essere necessario arrotondare il risultato di un'assegnazione, un cast, un argomento passato o un'altra operazione oppure che per l'operazione sono stati esauriti i registri ed è stato necessario utilizzare la memoria (spilling). Questa situazione può comportare una riduzione delle prestazioni.

Per risolvere il problema ed evitare l'arrotondamento, eseguire la compilazione con /fp:fast oppure utilizzare valori double anziché valori float.

Per risolvere il problema ed evitare che i registri vengano esauriti, modificare l'ordine del calcolo e l'utilizzo dell'inserimento inline.

Per impostazione predefinita, questo avviso non è attivo. Per ulteriori informazioni, vedere Avvisi del compilatore disattivati per impostazione predefinita.

Esempio

Nell'esempio seguente viene generato l'errore 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);
}