float偷吃了,一定是float偷吃了
c++吧
全部回复
仅看楼主
level 4
龙0凰 楼主
无法理解
using namespace std;
float a,b;
cout.setf(ios_base::fixed,ios_base::floatfield);
cin>>a>>b;
cout<<a<<" "<<b;
cout<<"a+b="<<a+b<<endl;
cout<<"a-b="<<a-b<<endl;
cout<<"a*b="<<a*b<<endl;
cout<<"a/b="<<a/b<<endl;
输出是
50.25
11.17
50.250000
11.170000
a+b=61.419998
a-b=39.080002
a*b=561.292480
a/b=4.498657
……cpp上的说法是float只能表示六个有效数字
也就是说在float看来61.419998会被看成61.42
……无法理解,现在不是前者被看成后者,是后者被看成前者啊
还有前面那串不明觉厉的cout.setf到底是什么神奇的东西啊……
cprimerplus通篇都是这种鬼东西,基本上就是第一天讲十位以内加法第二天讲积分方程的节奏
2013年06月22日 05点06分 1
level 13
纳尼纳尼
2013年06月22日 06点06分 3
[汗]镜像
2013年06月22日 18点06分
[喷]
2013年06月23日 01点06分
level 14
晒分快[怒]
2013年06月22日 06点06分 4
不要加字幕嘛
2013年06月22日 13点06分
level 6
是小数点后6位。。
2013年06月22日 07点06分 5
level 7
大概猜测一下, 具体我也不太懂,还是等大神来解答吧!
浮点数在计数机中是不能被精确表示的,50.25和11.17在计算机中都只能近似的表示,例如将52.25表示成52.2499999,将11.17表示成11.169999,当将他们进行运算时就有它们在计算机中的实际值进行运算,所以就会出现楼主所看到的现象,52.25+11.17不是61.42,而是一个近似值
2013年06月22日 07点06分 6
但是52.25能表示成52.25为什么还要近似成与原始值不同的数……既不合情又不合理
2013年06月22日 10点06分
回复 龙0凰 :合情合理
2013年06月22日 10点06分
回复 二价氢 :我就想知道0.0001去哪里了
2013年06月22日 10点06分
不好意思啊,这里我只能意淫了,我学得也不够深,楼主说52.25能表示成52.25是根据cout输出结果得出的,但这里是不能够说明52.25是能被精确表示的,原因我也说不上来,学艺不精。我从一本书《深入理解计算机系统》知道浮点数不能够精确表示和其带来的副作用,就是楼主遇到的疑惑,楼主不妨看一看
2013年06月22日 10点06分
level 9
用double吧,少年
2013年06月22日 10点06分 7
层主说的对。楼主请注意,float叫单精度浮点数,从名字上就知道它的精度有多差,所以用double(双精度浮点数)吧。
2013年06月23日 02点06分
回复 yjryym :精度仅限于整数位吗?
2013年06月23日 03点06分
回复 龙0凰 :这个不知道,不过我觉得float的整数部分是精确的,小数部分基本都不精确。而double可以精确几位小数。
2013年06月23日 15点06分
回复 龙0凰 :如果你要小数部分绝对精确,建议你用C++自定义定点型小数(比如Windows的货币型(CURRENCY)实际上是一个64位整数,将其中的后4位十进制用来表示小数部分,所以它的小数部分是绝对精确的,并且运算速度要比浮点数快很多倍。)。
2013年06月23日 15点06分
level 9
2013年06月22日 10点06分 8
level 11
好像是按2进制存数字,然后另外一个数保存小数点在哪一个2进制位的后面的
2013年06月22日 13点06分 9
level 9
这些数能被精确表示,因为它们都能表示为:
int + 2^-n
2013年06月23日 03点06分 10
能被精确表示的小数仅限于二进制后依然是有限小数,且位数在限制范围内的意思?
2013年06月23日 03点06分
@龙0凰
2013年06月23日 12点06分
level 10
我还以为是@chu
2013年06月23日 12点06分 11
level 11
同用一本书,这书你不能硬钻,有些东西放放,过段时间回来再看,有的就懂了,话说这个我也不懂。
2013年06月23日 15点06分 12
level 9
曾经有个女孩儿问我:“你是帅哥吗?”我惭愧的说:“我不是”那女孩啪啪的给了我两个耳光,然后转身跑了,丢下一句话:“你撒谎!”
2013年07月02日 11点07分 13
1