Question

Je tente d'ajouter quelques valeurs CGFloat récursive dans mon programme. Et je viens de réaliser dans un scénario particulier, le total généré était incorrect. Pour assurer que j'avais tort de rien dans ma logique de programme, j'ai créé un exemple simple de ce scénario (voir ci-dessous) et ce même imprimé une valeur erronée.

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

La première affiche NSLog 689.580.736,000000 ... alors que le résultat correct 689580720. Cependant, la seconde NSLog imprime le résultat correct. Je ne sais pas si cela est un bug ou si je fais quelque chose de mal.

Merci, Murali

Était-ce utile?

La solution

CGFloat est un seul flotteur de précision sur les 32 cibles de bits tels que iOS - il ne dispose que d'une mantisse de 23 bits, à savoir d'environ 6 - 7 chiffres significatifs. Utilisez un type double de précision si vous avez besoin une plus grande précision.

Vous devriez probablement David Goldberg Ce que tout informaticien devrait savoir sur arithmétique flottante avant de poursuivre beaucoup plus loin avec l'apprentissage au programme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top