そうです、私は本当に夢を生きていると思います。AIXマシンでコンパイルして実行する次のコードがあります。
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;
}
これで、計算後の「a」の値は「1」として報告されます。そして、このAIXマシンでは、「if」が入力されているため、1>1が真であるように見えます。そして、私が考える「1」のacosは、1が1より大きいため、NanQを返します。それがどのように可能であるかを尋ねてもよいでしょうか。もう何を考えたらいいのかわからない!
このコードは、「a」が実際に1と思われる値を取り、acos(a)が0である他のアーキテクチャでも問題なく機能します。