鱼C论坛

 找回密码
 立即注册
查看: 1831|回复: 9

为什么输出不对

[复制链接]
回帖奖励 30 鱼币 回复本帖可获得 10 鱼币奖励! 每人限 1 次(中奖概率 50%)
发表于 2014-8-28 18:44:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 李星 于 2014-8-29 11:49 编辑

#include <stdio.h>
void main()
{   float a,b;

a = 2147483647.0;

  printf("%f\n",a);
}


#include <stdio.h>
void main()
{   float a,b;

a = 2147483648.0;

  printf("%f\n",a);
}


这两个的结果都是2147483648

1

1

2

2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-28 20:00:39 | 显示全部楼层

回帖奖励 +10 鱼币

这里面有浮点数的保留值问题。
float 比 double 保留值少。
关于浮点数的保留值.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-28 20:51:36 | 显示全部楼层
放鸟的笼子 发表于 2014-8-28 20:00
这里面有浮点数的保留值问题。
float 比 double 保留值少。

能说的具体点吗  、、我真的还不是很懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-28 21:43:20 | 显示全部楼层
改成double应该就OK了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-28 21:52:09 | 显示全部楼层

回帖奖励 +10 鱼币

foat 这个是 短的 小数型 double是长的,换这个,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-29 10:36:05 | 显示全部楼层
Angel丶L 发表于 2014-8-28 21:52
foat 这个是 短的 小数型 double是长的,换这个,

float是短的没错  但是为什么2147483647.0输出时就成了2147483648.0
                       可是又为什么2147483648.0输出就是一直的呢
                       按理说短的话那么就会2147483648.0输出也会有问题啊
                     求解答!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-29 13:22:12 | 显示全部楼层
【转】
这个你得知道浮点型数据的存储格式;
我简单给你说下,具体不懂你再问我;
11.2的小数部分0.2转换为2进制则是无限循环的00110011001100110011...单精度在存储的时候用23bit来存放这个尾数部分(前面9比特存储指数和符号);同样0.6也是无限循环的;
而打印格式为%f的时候,数据会以8字节出栈!这个时候后32bit都是0,(正常来讲原数是一直循环的)所以打印出的结果就这样了;
而你定义成双精度,它本身就是8字节存储,(相比单精度存储,他后32bit是有数据的!)所以这个时候取出的8字节,四舍五入直接就是0.6!就好比你定义输出%.1f一样,也会打印出0.6,是一个道理!
不知你明白没。单精度双精度转换的时候,一般小数末位不是5的话,都会丢失数据的!原理就像上面说的一样。记得采纳哦亲!

以上内容皆引用自:http://zhidao.baidu.com/link?url=pzfXixFNBaezZWFOTGbKwG6nflPq4UIip3i8F679JmOExl0NJIRhCHd7P6GkVee6-wP8-GRndqdRGmSZX9I9cpwQkm7EOAtbl8gjDYCs-WS
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-8-29 18:05:10 | 显示全部楼层
musilintan 发表于 2014-8-29 13:22
【转】
这个你得知道浮点型数据的存储格式;
我简单给你说下,具体不懂你再问我;

不是很懂啊  为什么说当打印时后32位是0就会影响呢 我的那个数字根本就不用到后32位啊   因为2147483647是4字节中有符号时的最大数  按理说是可以正确打印出来的啊
   还有啊 你说的0.6那个是什么四舍五入出来的啊  像这种数即使是无限循环真的对结果有影响吗、、、比如说1.0/3*3(float)时结果能是1.00啊而且我a=1.0/3; b=a*3;时结果b也可以等于1.00打印出来时就是a=0.3333  b=1.0000、、、、、、、、但是当我a=0.3333;b=a*3;时结果就是0.9999?????????
计算机的思路真是难理解啊!!
  请指点下!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-4 18:32:04 | 显示全部楼层
范围问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-4 14:02:40 | 显示全部楼层

回帖奖励 +10 鱼币

范围不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表