24小时热门版块排行榜    

查看: 3118  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 312求调剂 +3 陌宸希 2026-03-16 4/200 2026-03-16 15:06 by peike
[考研] 化学工程321分求调剂 +7 大米饭! 2026-03-15 7/350 2026-03-16 10:25 by 了了了了。。
[考研] 344求调剂 +3 knight344 2026-03-16 3/150 2026-03-16 09:42 by 无际的草原
[考研] 0856专硕279求调剂 +5 加油加油!? 2026-03-15 5/250 2026-03-15 11:58 by 2020015
[考研] 265求调剂 +4 威化饼07 2026-03-12 4/200 2026-03-14 17:23 by userper
[考研] 308 085701 四六级已过求调剂 +7 温乔乔乔乔 2026-03-12 14/700 2026-03-14 10:49 by JourneyLucky
[考研] 328,0703考生求调剂,一志愿为东北师范大学 +4 观素律 2026-03-09 5/250 2026-03-14 01:24 by JourneyLucky
[考研] 312求调剂 +6 陌宸希 2026-03-10 6/300 2026-03-14 00:40 by JourneyLucky
[考研] 材料工程专硕,一志愿中国矿业大学,总分314,求调剂 +5 无懈可击的巨人 2026-03-10 5/250 2026-03-14 00:37 by JourneyLucky
[考研] 【考研调剂求收留】 +3 Ceciilia 2026-03-11 3/150 2026-03-13 20:18 by JourneyLucky
[硕博家园] 085600 260分求调剂 +3 天空还下雨么 2026-03-13 5/250 2026-03-13 18:46 by 天空还下雨么
[考研] 310求调剂 +3 【上上签】 2026-03-11 3/150 2026-03-13 16:16 by JourneyLucky
[考研] 一志愿211化学学硕310分求调剂 +8 努力奋斗112 2026-03-12 9/450 2026-03-13 15:41 by JourneyLucky
[考研] 工科调剂 +4 Jiang191123! 2026-03-11 4/200 2026-03-13 15:15 by Miko19
[考研] 274求调剂0856材料化工 +12 z2839474511 2026-03-11 13/650 2026-03-13 10:39 by peike
[考研] 08食品或轻工求调剂,本科发表3篇sci一区top论文,一志愿南师大食品科学与工程 +3 我是一个兵, 2026-03-10 3/150 2026-03-13 10:21 by Yuyi.
[考研] 290求调剂 +3 ADT 2026-03-13 3/150 2026-03-13 10:19 by peike
[考研] 化工学硕306求调剂 +9 42838695 2026-03-12 9/450 2026-03-13 10:16 by houyaoxu
[考博] 2026年博士申请 +3 QwQwQW10 2026-03-11 3/150 2026-03-12 17:58 by gxch43
[考研] 0856材料与化工353分求调剂 +11 NIFFFfff 2026-03-09 11/550 2026-03-10 18:36 by suyuanhai
信息提示
请填处理意见