| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1236 人关注过本帖
标题:求教一下循环更新变量的问题,书上的答案和我学的概念有冲突
只看楼主 加入收藏
烈阳雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2013-3-19
收藏
得分:0 
回复 10楼 wp231957
厄,因为他讲到有一些特殊情况存在,这个时候浮点数是可以循环更新而不会出现差错的,我就在纳闷,是不是这就是特殊情况呢。。。
现在我的问题已经解决了,结论是浮点数也可以带入循环。
再次感谢您有耐心回答如此之基础的概念性问题。
2013-03-26 23:20
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
学习C语言更多的是自己去验证,不要轻易把一些别人说的话当做 定理 ,即使那人是‘专家’

三十年河东,三十年河西,莫欺少年穷!
2013-03-26 23:25
烈阳雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2013-3-19
收藏
得分:0 
回复 12楼 韶志
受教。
2013-03-26 23:38
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
浮点型数据是非准确存储
所以才会有"循环更新的变量不能定义为浮点型"

浮点型数据比较大时精度高时要注意,wp231957 的说法及观点是有问题的

如你们以后面试极有可能遇到的问题:

一个浮点型变量x,如何判断x的值是否是零????
 if(x==0)    //错误的
 if(|x-0.000001|<0.000001) //正确的

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-27 09:36
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用烈阳雨在2013-3-26 22:44:18的发言:

我看的是郝斌老师的视频,讲到循环的“为什么循环更新的变量不能定义为浮点型”时他解释过。
我的理解是:float 和 double 都不能保证可以精确的存储一个小数,计算机存储浮点型数字时用的是非常接近的一个数,比如3可能是3.0000001(举个例子,有错请提点),若是多次循环的累积可能让一个微不足道的小差值变成足以影响到输出结果的不可忽视之差。
举例:
 例:有一个浮点型变量X,如何判断X的值是否为零。
错误做法:
            if (x == 0)
               
            else  
                不是
        因为X就算是0,也未必会是以0存储的,可能用0.0000000001存储呢。
正确做法:
if( |x – 0.000001| <= 0.000001)  
/* 注意括号里的差打上了取绝对值符号 */
   
else  
    不是
对的,要牢记.否则你以后会不知道自己的程序错在什么地方,因为程序逻辑都对的,但结果却是错的

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-27 09:40
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用烈阳雨在2013-3-26 23:38:20的发言:

受教。
还有,虚心是个好习惯,但太虚心了未必是好事.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-27 09:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用Knocker在2013-3-27 09:36:12的发言:

浮点型数据是非准确存储
所以才会有"循环更新的变量不能定义为浮点型"

浮点型数据比较大时精度高时要注意,wp231957 的说法及观点是有问题的

如你们以后面试极有可能遇到的问题:

一个浮点型变量x,如何判断x的值是否是零????
 if(x==0)    //错误的
 if(|x-0.000001|<0.000001) //正确的
   没关系  反正我又不参加面试
   至于高精度  也就一些特种行业需要而已

DO IT YOURSELF !
2013-03-27 09:51
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
程序代码:
# include <stdio.h>
int main(void)
{
    int i;

    float a=0.0,b=0.0;


    for (i = 0; i < 1000; ++i)
    {

         a = a+0.00001;
         a = a-0.00001;

    }


    for (i = 0; i < 1000; ++i)
    {

         b = b+0.00056;
         b = b-0.00056;

    }

    if( a == b )
    printf("a  == b");
    else
     printf("a  <>  b");

    getch();
    return 0;
}
特种行业?试试吧

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-27 10:07
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
程序代码:
# include <stdio.h>
int main(void)
{


    float a=0.0,b=0.0;



         a = a+0.00001;
         a = a-0.00001;


         b = b+0.00056;
         b = b-0.00056;



    if( a == b )
    printf("a  == b");
    else
     printf("a  <>  b");

    getch();
    return 0;
}

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-27 10:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
循环步进是可以用浮点数的,因为那仅仅是一个表达式求值而已,for()和while()没有本质的区别,一样的(其实正统的结构化编程只有while循环,C程序员偏爱for()循环)。至于精度,要视实际问题而定,浮点数运算一定有误差,关键是你怎么设计程序减少误差到可接受的范围内。

授人以渔,不授人以鱼。
2013-03-27 13:00
快速回复:求教一下循环更新变量的问题,书上的答案和我学的概念有冲突
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020135 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved