首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教: int i = 3.3 / 1.1; //i的值为何为2 ?

2012-02-20 
请问:int i 3.3 / 1.1//i的值为何为2 ?????????????????请问:inti3.3/1.1//i的值为何为2?浮点数在内

请问: int i = 3.3 / 1.1; //i的值为何为2 ?????????????????
请问:       int   i   =   3.3   /   1.1;         //i的值为何为2   ?

浮点数在内存中是怎么存储的?求祥解!

[解决办法]
这里有精度丢失,很奥妙的东西(所以说数值计算是不能信赖的)
int i = 5.5 / 1.1;就是5了
而LZ的例子就是2了~

[解决办法]
浮点数不精确的, 尾数部分用除法表示的,
3.3存储的数据如果你用计算器按照IEEE的标准算的话可能会是3.299999999999.....
1.1也有可能是 1.10000...00111...

用浮点数乘除转int结果不正确很正常
[解决办法]
浮点数在内存中是怎么存储的?求祥解!
___________________________________________
看看这个:http://blogger.org.cn/blog/more.asp?name=njucs&id=10145
[解决办法]
要知道3.3和1.1在二进制数来说,都是无限循环小数,但double的表示范围是有限的,因此会截断一部分。
至于截断后,怎么取整,那就得看操作系统是怎么表示double数的。
参考《计算机体系结构》
[解决办法]
#include <iomanip>

int main()
{
double d = 3.3 / 1.1;
int i = (int)d;

cout.precision(20);
cout < <fixed < <d < <endl;
cout < <i < <endl;
//printf( "%a ", d);
}

[解决办法]
很明显的强制类型转换,要丢失精度的

并不是每一个浮点数都能准确的用2进制表示出来,有些数字在我们平时在纸上写出来时很容易,但是在转换成2进制在计算机中存储时,却是一个无限的,所以只能取前面n位(按照精度而定),这就是一个大致数字了,所以有时浮点数计算出现偏差是很正常的,所以在比较两个浮点数是否相等时并不用if( a==b )而用if(a-b <0.000000001||b-a <0.000000001)具体要看精度而定了

热点排行