免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6218 | 回复: 11
打印 上一主题 下一主题

float类型的不解之处 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-09 16:30 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>

main()
{               
        int        i;
        char data1[50];
        char ktmp;
               
    for(ktmp=0;ktmp<30;ktmp++){
            data1[ktmp]=ktmp+1;
    }
    printf("\n");
    float *p2 ;//= (float *)data1;
    p2 = (float *)data1;
    for(i=0;i<30;i++)
    {
            printf("%f \n",   *p2);
            p2++;
    }
}

代码如上,本想打印出1,2,3.......的浮点数表示,但是打印出来的越往后越是一些比较怪的数,不知为何原因?
系统red hat linux ,kernel 2.4.2

论坛徽章:
0
2 [报告]
发表于 2007-10-09 16:41 |只看该作者
float型数据的存贮方式比较奇特。。。

论坛徽章:
0
3 [报告]
发表于 2007-10-09 16:50 |只看该作者
是的,貌似不能强制转换成float *

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2007-10-09 19:50 |只看该作者
原帖由 los 于 2007-10-9 16:30 发表
#include
#include

main()
{               
        int        i;
        char data1[50];
        char ktmp;
               
    for(ktmp=0;ktmp

建议 IEEE 754 标准文档.

论坛徽章:
0
5 [报告]
发表于 2007-10-10 10:07 |只看该作者
原帖由 MMMIX 于 2007-10-9 19:50 发表

建议 IEEE 754 标准文档.


不是浮点数精度的问题,而是打印出来的根本不是原有的那个数了

论坛徽章:
0
6 [报告]
发表于 2007-10-10 10:31 |只看该作者
char只有一个字节
float有四个字节
可以用sizeof看看啊

论坛徽章:
1
戌狗
日期:2014-02-14 15:56:39
7 [报告]
发表于 2007-10-10 14:06 |只看该作者
强制转换的是地址,所以会出问题吧

论坛徽章:
1
戌狗
日期:2014-02-14 15:56:39
8 [报告]
发表于 2007-10-10 14:10 |只看该作者
改成这样就行了吧

#include <stdio.h>
#include <stdlib.h>

main()
{               
        int        i;
        char data1[50];
        char ktmp;
               
    for(ktmp=0;ktmp<30;ktmp++){
            data1[ktmp]=ktmp+1;
    }
    printf("\n");
    char *p2 ;
    p2 = data1;
    for(i=0;i<30;i++)
    {
            printf("%f \n",   (float)*p2);
            p2++;
    }
}

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2007-10-10 18:42 |只看该作者
原帖由 los 于 2007-10-10 10:07 发表


不是浮点数精度的问题,而是打印出来的根本不是原有的那个数了

我的意思是你先了解下 IEEE754 标准, 看看浮点数的格式是啥, 对浮点数来说强制类型转换又意味什么, 等等问题.

BTW, 你如果想要了解某 CPU 的浮点数的表示方式, 根本不用这么麻烦, 声明个浮点型变量并初始化, 然后将其内存内容打印出来即可(考虑使用 union, 不要做强制类型转换).

论坛徽章:
13
CU大牛徽章
日期:2013-04-17 11:20:3615-16赛季CBA联赛之吉林
日期:2017-05-25 16:45:4715-16赛季CBA联赛之福建
日期:2017-03-13 11:33:442017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:13:29IT运维版块每日发帖之星
日期:2016-03-15 06:20:01IT运维版块每日发帖之星
日期:2015-10-02 06:20:00CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-04-17 11:46:39CU大牛徽章
日期:2013-04-17 11:46:28
10 [报告]
发表于 2007-10-10 19:57 |只看该作者

回复 #1 los 的帖子

#include <stdio.h>
#include <stdlib.h>

main()
{               
        int        i;
        char data1[50];
        char ktmp;
               
    for(ktmp=0;ktmp<30;ktmp++){
            data1[ktmp]=ktmp+1;
    }
    printf("\n");
    float *p2 ;//= (float *)data1;
    p2 = (float *)data1;//你直接把整形数组转成浮点数数组,这样肯定结果是不对的。
    for(i=0;i<30;i++)
    {
            printf("%f \n",   *p2);
            p2++;
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP