关于double在计算中的精度取舍问题

udieudie 2009-07-21 11:59:23
我想要做一个公式的计算的程序,其中有一个中间变量是double类型的,碰到这样的情况,实际手工计算的话正好应该是cos(90),结果是0,但是用程序计算出来的数字其实0.0007.。。。想请问一下,我应该怎么做才能确定将这一步的结果变成0,或者说我可以将这个double类型的数保留小数点后几位,之后再进行下面的计算,请告诉一下应该用什么函数,需要什么头文件,还有我用的是那种运行时出现命令行的控制台类型进行编程的,不是MFC,aof始终找不到应该用什么头文件。
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
udieudie 2009-08-09
  • 打赏
  • 举报
回复
结账了啊
谢谢各位
米西牙乖 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zgl7903 的回复:]
  double pi = atan(1.0) * 4;
  double t = sin(pi/2);
[/Quote]

这个定义PI的方法真好,佩服一下。

另外回答楼主的问题:

double型的数,是没有办法精确到0.0的,总有一点点误差,这是因为二进制表示小数的误差引起的。

不过呢,这个问题也好解决。

如果你想判断某个double型变量,是不是=0,可以判断其是否小于0.000000000001来判断。

如果你想输出0的值,直接用CString buffer.Format("%.1f",aa); aa就是那个变量,函数会自动转换的。
udieudie 2009-08-09
  • 打赏
  • 举报
回复
还有大家的意思是这个问题主要不是数字精度的问题呗???
udieudie 2009-08-09
  • 打赏
  • 举报
回复
回复的太晚了,忘了发过这么个帖子了
想问一下1L的意思是说cos( 90 )这里面的90是指的弧度呗???
还有四楼的
double pi = atan(1.0) * 4;
double t = sin(pi/2);
能解释一下吗???
或者谁能帮忙解释一下???
solarwindsj 2009-07-21
  • 打赏
  • 举报
回复
一楼说的没错,微软的工程师不可能傻到连这个错误都犯
zgl7903 2009-07-21
  • 打赏
  • 举报
回复
double pi = atan(1.0) * 4;
double t = sin(pi/2);
fffanpei 2009-07-21
  • 打赏
  • 举报
回复
顶1楼的
用户 昵称 2009-07-21
  • 打赏
  • 举报
回复
要不就是你的PI定义的不太精确。
用户 昵称 2009-07-21
  • 打赏
  • 举报
回复
cos( 90 )?cos( 90度 ),要转成弧度!!!!!!!

16,472

社区成员

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

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

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