小数运算出错的原因
本章讲述了计算机计算小数的原因,计算机是由浮点数来表示的,所有信息以二进制数的形式来处理。计算机之所以出现运行错误,是因为“有一些十进制数的小数无法转换成二进制数”。
浮点数是指用符号,尾数,基数和指数四部分来表示的小数。由于计算机使用的是二进制数,所以基数为二,所以往往将其省略。只用符号,指数和尾数。由于表示小数的数据类型不同,所以位数也不同。单进度浮点数为32位,其二进制数表示为符号位(1位)、指数位(8位)尾数位(23位);双进度浮点数为64位,其二进制表示为符号位(1位)、指数部分(11位)、尾数部分(52位)。而指数部分是用"EXCESS系统表现"来表示,尾数部分则是用“正则表达式”来表示。
英语中的正则表达式叫作“regular expression”,其中regular的意思有:规律,恒定的,规则的;expression的意思有:表达,表示方法。大概的意思就是说:有规律的,或者说是恒定的表示方法,个人感觉有点秦始皇统一度量衡内味儿。具体到应用中,举个栗子你就明白了,例如计算4÷3=?,结果我们可以写成假分数的形式:4/3,或带分数的形式:1又1/3,亦或是无限循环小数形式:1.33...,而此时规定了,要求统一写成小数形式,保留两位小数,那么结果只能是1.33,假分数、带分数以及无限循环小数的表示形式虽说仍然正确,但是它们却不在符合要求了,而这个规定就可以称之为“regular expression”,也就是那个不太好理解的术语——“正则表达式”。
策略一:回避错误,即无视这些极其微小的误差。不过这个策略乍一听觉得这很荒唐一回避错误也叫避免错误......,事实上,在现实的生活中,我们无法做到每一个零部件能真正地做到那么精确无误,让100个0.1mm长的零部件合起来为长为10.000002cm,其实完全是可以接受的。这些细小的误差可以忽略不计。不过这个地方说成回避的确有点不太合适,叫做 允许错误 或许更好点。
策略二:将小数化为整数进行计算,因为整数都是可以用二进制数表示的,这种做法适合纯粹的数值运算。比如同样是100个0.1相加,我们可以让每一个数都乘以10,再将求得的结果除以10即可算出正确的结果。
浙公网安备 33010602011771号