J'essayais d'append des valeurs CGFloat récursivement dans mon programme. Et je viens de réaliser dans un scénario particulier que le total généré était incorrect. Pour m'assurer que je n'avais rien de mal dans ma logique de programme, j'ai créé un exemple simple de ce scénario (voir ci-dessous) et cela a imprimé la même mauvaise valeur.
CGFloat arr[3] = {34484000,512085280,143011440}; CGFloat sum = 0.0; sum = arr[0] + arr[1] + arr[2]; NSLog(@"%f",sum); int arr1[3] = {34484000,512085280,143011440}; int sum1 = 0.0; sum1 = arr1[0] + arr1[1] + arr1[2]; NSLog(@"%d",sum1);
Le premier NSLog imprime 689580736.000000 … alors que le résultat correct est 689580720. Cependant, le deuxième NSLog imprime le résultat correct. Je ne sais pas si c'est un bug ou si je fais quelque chose de mal.
Merci, Murali
CGFloat
est un flotteur de précision simple sur des cibles 32 bits telles que iOS – il a seulement une mantisse 23 bits, soit environ 6 – 7 numbers significatifs. Utilisez un type double précision si vous avez besoin d'une plus grande précision.
Vous devriez probablement lire Ce que tout scientifique informatique de David Goldberg devrait savoir sur l'arithmétique en floating point avant d'aller plus loin en apprenant à programmer.