标题:奇怪的问题,关于浮点型数的乘法
只看楼主
bigbear2000
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-4-5
 问题点数:0 回复次数:9 
奇怪的问题,关于浮点型数的乘法

#include <stdio.h>

void main()
{
float a , b ;
scanf("%f",&a) ;
printf("%f\n",a) ;
scanf("%f",&b) ;
printf("%f\n",b) ;
a = a * b ;
printf("%f\n",a) ;
}

input : 3.6 4.1
output :
3.600000
4.100000
14.759999

为什么不是
output :
3.600000
4.100000
14.760000

??

搜索更多相关主题的帖子: 乘法 printf output scanf float 
2007-04-24 17:00
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 
计算机是不四舍五如的  他不管后面的数   都舍去

   好好活着,因为我们会死很久!!!
2007-04-24 17:18
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 

看错拉 我也不晓得哈 不好意思


   好好活着,因为我们会死很久!!!
2007-04-24 17:21
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
得分:0 
浮点数是以指数形式储存,比如3.6,储存的结构是由两部分组成,一部分是0.36(小数部分,一般占三个字节),另一部分是1(指数部分,一般占一个字节),而小数部分转换为二进制数的时候有可能是一个近似的(原因请自己去查看小数转换为二进制数的原理),所以最后的结果就会有一定的误差,而之所以输出一个数的时候,就是原来那个数,比如输入3.6,输出结果也是3.6,这是因为小数部分占有三个字节,也就是24位,一般的数(小数部分转换为二进制数不超过24位)都会能够正确的转换为相应的数而不会出现差错(不过也有些数小数部分转换为二进制数时会超过24位,这样就会产生误差),而当两个数相乘时,当两个数的小数部分相乘时就有可能超过24位,这样就会截取前24位,再转换的时候就会出现误差了

雁无留踪之意,水无取影之心
2007-04-24 17:29
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
得分:0 
http://bbs.bc-cn.net/dispbbs.asp?boardid=5&replyid=84739&id=129240&page=1&skin=0&star=1

这里面的1(2)讲的就是小数转换为二进制数的原理,你看下

雁无留踪之意,水无取影之心
2007-04-24 17:32
bigbear2000
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-4-5
得分:0 
回复:(PcrazyC)http://bbs.bc-cn.net/dispbbs.asp?...
那有没有办法让结果是应该得的那个结果呢?
2007-04-24 17:55
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
得分:0 

可以,用数组处理,定义一个结构体,一个变量用来储存数M,一个变量用来储存级数N,比如3.6,用一个结构体数组A储存,A[0].M=3;A[0].N=0;A[1].M=6;A[1].N=-1;然后乘就要你自己处理了,级数相同的进行加法,然后再根据级数从大到小输出,记住还要输出小数点

[此贴子已经被作者于2007-4-24 18:07:15编辑过]


雁无留踪之意,水无取影之心
2007-04-24 18:06
bigbear2000
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-4-5
得分:0 
回复:(PcrazyC)可以,用数组处理,定义一个结构体,一...
好的,谢谢!
2007-04-24 18:41
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
bigbear2000

你把数据定义成double看一下.

倚天照海花无数,流水高山心自知。
2007-04-24 19:16
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
得分:0 

楼上可行,对一般的数用double可以解决,又多了32位


雁无留踪之意,水无取影之心
2007-04-24 22:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-134554-1-1.html




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

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