刚刚发现的严重问题!

Suprman 2004-11-21 02:40:05
用windows的计算器计算:
atan(91/41)=1.1474855710911767
用VC6的函数计算:
atan(91/41)=1.1536526810020113
不知为何?
...全文
152 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Trashy 2004-12-05
  • 打赏
  • 举报
回复
关注一下!
Suprman 2004-12-05
  • 打赏
  • 举报
回复
请高人指点!
Suprman 2004-11-25
  • 打赏
  • 举报
回复
我的Dev C++4 ->atan(91.0/41.0)=1.15365
并且同时试了Win98系统,问题依旧。
请高人指点!
3m2u 2004-11-21
  • 打赏
  • 举报
回复
两个整数除的话结果只是整形的。除非强制转换一下
Suprman 2004-11-21
  • 打赏
  • 举报
回复
//atan(x)=x-x^3/3+x^5/5-x^7/7+.....(-1<x<1)

double mult,sum,xx;
sum=0;
mult=41/91.0;
xx=mult*mult;

for(int i=1;i<50;i+=2){
sum+=mult*((i+1)%4==0?-1:1)/i;
mult*=xx;
}
//sum=0.42331075570372001;
是不是VC6的计算库有问题?
Suprman 2004-11-21
  • 打赏
  • 举报
回复
用windows的计算器计算:
atan(91.0/41.0)=1.1474855710911767467767615705714
atan(41.0/91.0)=0.42331075570371987245456012106831
满足atan(91.0/41.0)+atan(41.0/91.0)=3.1415926535897932384626433832795/2=pi/2精确到30位
用VC6的函数计算:
atan(91.0/41.0)=1.1536526495543453
atan(41.0/91.0)=0.41714364579287133
满足atan(91.0/41.0)+atan(41.0/91.0)=3.14159259069443326/2精确到6位。

看来VC6的结果问题不小。
我下载了几个计算器,结果都和VC6相同。
那位手头有真计算器,麻烦算一下。
oyljerry 2004-11-21
  • 打赏
  • 举报
回复
Dev C++ ->1.14786
i8210 2004-11-21
  • 打赏
  • 举报
回复
挺有意思!
社会栋梁 2004-11-21
  • 打赏
  • 举报
回复
计算方法不同
EnochShen 2004-11-21
  • 打赏
  • 举报
回复
to lfchen(一条晚起的虫)

C++下
91/41 = double 看看
atan接收double的
double atan( double x );
一条晚起的虫 2004-11-21
  • 打赏
  • 举报
回复
C++下
91/41 = 2
当然不一样了
EnochShen 2004-11-21
  • 打赏
  • 举报
回复
呵呵,我是在MFC里面。,调试的时候看的
Suprman 2004-11-21
  • 打赏
  • 举报
回复
//TC2.0
#include "math.h"
#include "stdio.h"

main()
{
double a;
a=atan(91.0/41.0);
printf("%f\n",a);
getch();

}
/1.15365
Suprman 2004-11-21
  • 打赏
  • 举报
回复
// EnochShen(小疯子抢分了,拦我者重伤!)
显然不是精度问题!
正如您所说,double15位,而结果在百分位就不同,这是一般工程计算所不允许的。
如果是VC6的问题,看来一些工程软件都可能存在问题。
bruceteen 2004-11-21
  • 打赏
  • 举报
回复
91/41 == 2 而不是 2.22
EnochShen 2004-11-21
  • 打赏
  • 举报
回复
呵呵,我是SP0的
EnochShen 2004-11-21
  • 打赏
  • 举报
回复
double最多15位,就是精度的问题
Suprman 2004-11-21
  • 打赏
  • 举报
回复
//EnochShen(小疯子抢分了,拦我者重伤!) :
//VC6 atan((double)91/41) = 1.1474855710912.
//就是精度的问题/
我的结果:
VC6 atan((double)91/41) = 1.1536526810020113
VB6 atan((double)91/41) = 1.1536526810020113
看来是我的VC6不行,我是win2000.sp4
EnochShen 2004-11-21
  • 打赏
  • 举报
回复
用VC6的函数计算:
atan(2.219512)=1.1474855381661

Suprman 2004-11-21
  • 打赏
  • 举报
回复
换成一个固定的值
用windows的计算器计算:
atan(2.219512)=1.1474855381660589020181114541256
用VC6的函数计算:
atan(2.219512)=1.1536526495543453
并且我感觉VC6的结果不正确,因为我的程序不能达到预期结果。
那位手头有计算器,麻烦算一下。
加载更多回复(3)

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧