Bon, je pense que je vis vraiment un rêve. Je le morceau suivant de code qui je compiler et exécuter sur une machine AIX:Quand est> un vrai?
AIX 3 5
PowerPC_POWER5 processor type
IBM XL C/C++ for AIX, V10.1
Version: 10.01.0000.0003
#include <stdio.h>
#include <math.h>
#define RADIAN(x) ((x) * acos(0.0)/90.0)
double nearest_distance(double radius,double lon1, double lat1, double lon2, double lat2){
double rlat1=RADIAN(lat1);
double rlat2=RADIAN(lat2);
double rlon1=lon1;
double rlon2=lon2;
double a=0,b=0,c=0;
a = sin(rlat1)*sin(rlat2)+ cos(rlat1)*cos(rlat2)*cos(rlon2-rlon1);
printf("%lf\n",a);
if (a > 1) {
printf("aaaaaaaaaaaaaaaa\n");
}
b = acos(a);
c = radius * b;
return radius*(acos(sin(rlat1)*sin(rlat2)+
cos(rlat1)*cos(rlat2)*cos(rlon2-rlon1)));
}
int main(int argc, char** argv) {
nearest_distance(6367.47,10,64,10,64);
return 0;
}
Maintenant, la valeur de « a » après le calcul est rapporté comme étant « 1 ». Et, sur cette machine AIX, il semble que 1> 1 soit vrai car mon 'si' est entré !!! Et mon acos de ce que je pense être '1' renvoie NanQ puisque 1 est plus grand que 1. Puis-je demander comment c'est possible? Je ne sais plus quoi penser !
Le code fonctionne très bien sur d'autres architectures où « a » prend vraiment la valeur de ce que je pense est 1 et ACOS (a) est 0.
Je préfère utiliser RADIAN (x) (((x) * M_PI)/2), vous appelez la fonction, qui est inutile et plus lente. – nothrow
pour répondre à votre question, 'a> a' ne devrait jamais être vrai, mais si un ressemble à 1, vous pourriez avoir' a> 1', donc vous devez corriger votre question parce que le titre est trompeur, vous n'êtes pas en train de comparer un à lui-même. –
Vous avez tous magnifiquement raison, merci! Je suis confus car le code fonctionne sur différentes architectures/compilateurs. Sur AIX 'a' finit par avoir une valeur comme '1.00000000000000022204'. Je suppose que je dois maintenant mettre en œuvre la comparaison epsilon. – Cricri