Avviso del compilatore (livello 3) C4738
archiviazione in memoria del risultato float a 32 bit, possibile riduzione delle prestazioni
C4738 avvisa che il risultato di un'assegnazione, un cast, un argomento passato o un'altra operazione potrebbe dover essere arrotondato o che l'operazione ha esaurito i registri ed è necessario usare la memoria (spilling). Ciò può comportare una perdita di prestazioni.
Per risolvere questo avviso ed evitare l'arrotondamento, compilare con /fp:fast o usare double
invece di float
.
Per risolvere questo avviso ed evitare l'esaurimento dei registri, modificare l'ordine di calcolo e modificare l'uso dell'inlining
Per impostazione predefinita, questo avviso non è attivo. Per altre informazioni, vedere Compiler Warnings That Are Off by Default.
Esempio
L'esempio seguente genera 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);
}