我用的是vs2008,一个简单的除法,double t = (jd - 2451545.0) / 365250.0,其中jd是double型的,但是这样的同一个算式在win32项目,和mfc项目中的极端结果却不一样,win32的结果是对的,但是我们的项目是在mfc中做的,不知道是不是因为设置的原因,如果是的,应该怎么设置啊?跪求各位大侠的解答!

解决方案 »

  1.   

    和mfc项目中的极端结果却不一样,win32的结果是对的
    ==什么叫做极端结果?是计算的精度么?
      

  2.   

    你用的都是基础类型 跟mfc 没关系吧!
    问题应该不在计算这里!
    多打几个F9 看看吧
      

  3.   

    重新编译一遍,注意debug和release.
      

  4.   

    没什么大的不同,但是vs默认的是unicode。不知道是否和你说的问题相关。“极端结果却不一样”?不是很清楚你要说什么。
      

  5.   

    比于:jd = 260057.50000000000,这个时侯,在WIN32中的计算结果是:-5.9999657768651611,但是在MFC
    中同样的算试计算结果是:-5.9999656677246094。虽然是小数点后第七位开始错的,但是差异导致的问题却很大,而且,我分别在两个工程中将算式还原(也就是做逆运算),都能还原成原来的结果(我想这个应该表明了结果不是计算错误,而是一种计算方式的选择出了问题吧),另外:如果在两个工程中分别将运算类型换成float,计算的结果却是一致的,但是精度不够,呵呵,搞死人。
      

  6.   

    代码:在win32和MFC中一样,我就不具体一一列举了,编译环境都是realse,换成debug后发现结果还是一样。在楼上我已经举了一个输入的例子了。
    Point3d computePosition(double jd) const
        {
          double t = (jd - 2451545.0) / 365250.0;        ....................................     };