既然0.1无法用二进制表示,那计算机用什么办法表示小数的?

1个回答

  • 就像人们十分熟悉的十进制无法精准地表示π和e一样,任何进制的数都无法完全精确地表示自然界中所有的“数”.但只要选择足够的精度,这些不精准的表达并不影响人们的生活和科学研究!小数在计算机中是用二进制“浮点”表示法表示的,有单精度(C/C++中的float型)和双精度(double型)之分;前者能达到24位二进制精度,后者能达到53二进制精度.通常这个精度已经足够足够了.浮点表示法是把一个数分为尾数和阶码两部分,尾数用原码、阶码用所谓移码来表示.以float型为例,尾数用23位、阶码用8位,1位用于符号,如十进制0.1,float二进制应该是0 01111100 10011001100110011001100.它的最高位是尾数符号,0表示正;紧接着的8位是阶码,阶码最高位的0表示阶码的移码为负,后面7位是阶码的补码;再后面23位是尾数.要说明的是尾数的最位1没有显示,因为规定尾数是大于1小于2的二进制数,最高位肯定是1,就不必显示了,计算时用上就是了;这就是23位二进制尾数却能表示24位精度的原因……