我用的是vs2008,一个简单的除法,double t = (jd - 2451545.0) / 365250.0,其中jd是double型的,但是这样的同一个算式在win32项目,和mfc项目中的计算结果却不一样,win32的结果是对的,但是我们的项目是在mfc中做的,不知道是不是因为设置的原因,如果是的,应该怎么设置啊?跪求各位大侠的解答!
比如:jd = 260057.50000000000,这个时侯,在WIN32中的计算结果是:-5.9999657768651611,但是在MFC 
中同样的算试计算结果是:-5.9999656677246094。虽然是小数点后第七位开始错的,但是差异导致的问题却很大,而且,我分别在两个工程中将算式还原(也就是做逆运算),都能还原成原来的结果(我想这个应该表明了结果不是计算错误,而是一种计算方式的选择出了问题吧),另外:如果在两个工程中分别将运算类型换成float,计算的结果却是一致的,但是精度不够,呵呵,搞死人。
代码:在win32和MFC中一样,我就不具体一一列举了,编译环境都是realse,换成debug后发现结果还是一样。
Point3d computePosition(double jd) const 

double t = (jd - 2451545.0) / 365250.0; .................................... }; 

解决方案 »

  1.   

    我这里没有VS2008,只能建议你好好测试一下了。帮你Up
      

  2.   

    你要求的精度太高了,你用google搜索下 
    c++ double 精度
    csdn上有问人问过float 和 double 的精度
      

  3.   

    -5.9999657768651611
    这是我在VS2008MFC项目下算的,就是WIN32也应该是这个数。这个浮点运算也不使用MFC库,都应该一样。你一说把我吓了一大跳,赶紧检查我的东西是不是有问题。浮点可以差一点,双精度差这么多那还能用了吗?好好查查吧!
      

  4.   

    试一下 VarDecDiv()函数具体的查MSDN