24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2857  |  回复: 21
11楼2012-02-29 16:45:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengxingwang

新虫 (初入文坛)

引用回帖:
: Originally posted by lurencyj at 2012-02-29 16:38:47:
CODE:
if(f==z)

改成
CODE:
if(fabs( f-z ) < 0.005)


#include
#include
void main()
{
        double x,y,t,e,p,f,z;
               x=1;
                   y=2;
           z=128;
                   for(t=1;fabs(t-6)<0.005;t=t+0.01)
                   {
                          e=x*t;
                          p=y*t;
              f=e*p*t;
                          if(fabs(f-z)<0.005)
                                  break;
                   }
                   printf("%f,%f\n",t,f);
}
是不是这样的啊?我改了还是不行,运行结果不对啊,是不是我编的程序有问题啊,C++我不太会编程, 这么简单个循环,被我弄的这么麻烦,我要疯了
12楼2012-02-29 16:55:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

引用回帖:
6楼: Originally posted by fengxingwang at 2012-02-29 14:43:24:
恩,你知道怎么把这些变量都定义成同一种形式的吗?我想让各个变量都是小数点后几位的。是不int,该改成double或float之类的啊?
#include <stdio.h>
void main()
{
        double x,y,t,e,p,f,z;
                ...

1 为什么不给我金币?
2、不用定义成一种类型,可以把if(f==z)改成 if(abs(f-z)<0.00001)类似这样,就可以了!!!
13楼2012-02-29 17:00:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengxingwang

新虫 (初入文坛)

引用回帖:
: Originally posted by lijie169 at 2012-02-29 17:00:42:
1 为什么不给我金币?
2、不用定义成一种类型,可以把if(f==z)改成 if(abs(f-z)<0.00001)类似这样,就可以了!!!

等会就给哈,每个人都给哈,我现在还没搞好呢。非常感谢你,大家都这么帮我,给钱我都愿意哈。
14楼2012-02-29 17:09:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peterjade

金虫 (正式写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
余泽成(金币+2): 谢谢参与应助! 2012-03-11 23:23:27
经过多次测试,测试开发环境是vc++ 6.0,
如果 double x=128.000000, y=128
       int  a =128;
用 比较运算符 == 比较的结果这三者都是相等的。
我觉得对于数值都是整数的double类型的变量,直接进行判断是相等的,因为在计算机内部可以用二进制数据完整表示。
   而对于某些double类型的数值,在计算机内部都是近似表示的,就像127.1234589等,
    代码中的t=t+0.01,实际上你调试查看变量t在内存当中的值不会是等于4,会是4.xxxxxxxxxxxxx这样的逼近值,所以后来计算的z不可能等于128
必须一步一步脚踏实地,才能站稳脚跟,活在当下
15楼2012-02-29 17:52:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peterjade

金虫 (正式写手)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助,欢迎常来程序语言版! 2012-03-11 23:23:40
double这样数据类型的值的比较,最好是用楼上建议的用差值的绝对值是否逼近一个非常小的正数(计算机就会认为是0),来判断是否相等
必须一步一步脚踏实地,才能站稳脚跟,活在当下
16楼2012-02-29 17:55:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sharkyurui1

金虫 (初入文坛)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
余泽成(金币+2): 鼓励讨论! 2012-03-11 23:24:26
不确定是什么地方出错,但是看到几个问题,和楼主探讨一下。
一个就是定义的double变量,printf能用%f正确打印出来么?我记得以前必须写printf("%lf,%lf\n",t,f)才能正确输出double变量的值。
二个就是楼上各位所说浮点数的比较一般都是控制在一定精度内的。
三个就是楼主可以学学调试,在for循环中某一赋值语句上下断点,然后开始调试程序,程序会在断点停下,然后单步执行程序,可以查看每个变量的实时值,就可以知道问题出在哪里了。如果你觉得让t值从1慢慢加到4很麻烦,也可以用条件断点,或者把t的初始值增大到3.9(不推荐,因为可能是浮点数误差累积)。
17楼2012-03-01 08:17:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

★ ★
余泽成(金币+2): 谢谢参与应助! 2012-03-11 23:24:46
引用回帖:
13楼: Originally posted by lijie169 at 2012-02-29 17:00:42:
1 为什么不给我金币?
2、不用定义成一种类型,可以把if(f==z)改成 if(abs(f-z)<0.00001)类似这样,就可以了!!!

lijie169的回答是对的!~~~ 楼主要给的。哈哈!

代码(这次,我运行过),结果是 4.000000,128.000000
CODE:
#include
#include
void main()
{
                double x,y,t,e,p,f,z;
                x=1;
                y=2;
                z=128;
                for(t=1;t<6;t=t+0.01)
                {
                                e=x*t;
                                p=y*t;
                                f=e*p*t;
                                if(fabs(f-z)<0.005)
                                                break;
                }
                printf("%f,%f\n",t,f);
}

很女子很弓虽大
18楼2012-03-01 18:31:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengxingwang

新虫 (初入文坛)

引用回帖:
: Originally posted by lurencyj at 2012-03-01 18:31:42:
lijie169的回答是对的!~~~ 楼主要给的。哈哈!

代码(这次,我运行过),结果是 4.000000,128.000000


#include <stdio.h>
#include <math.h>
void main()
{
                double x,y,t,e,p,f,z ...

谢谢你了,真运行对了
19楼2012-03-06 11:54:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

源定今生

新虫 (初入文坛)

精度范围没确定吧?
20楼2012-03-06 13:08:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fengxingwang 的主题更新
信息提示
请填处理意见