conversione implicita accorcia a 64 bit a 32 bit
-
10-10-2019 - |
Domanda
Qualcuno può spiegare perché questo causa l'errore indicato nel titolo?
CGFloat dx = fabs(lastPoint.x - currentPoint.x);
Grazie
Soluzione
fabs()
restituisce un double
(64-bit), ma CGFloat
è definito come un float
(32-bit). E 'generalmente innocui - io personalmente anche disattivare l'avviso del compilatore, come l'esecuzione di calcoli utilizzando i valori double
è tipicamente almeno il più velocemente utilizzando i valori float
Altri suggerimenti
Una risposta migliore è quella di utilizzare #include <tgmath.h>
. Che definisce intestazione funzioni "adattive" che chiamano la funzione corretta qualsiasi dimensione parametro.
Con tale intestazione incluso, si può semplicemente chiamare fabs
senza ottenere che l'avvertimento (né preoccuparsi di perdita di precisione causati dall'uso della funzione di sbagliato).