计算机中浮点数的表示

整数部分:

小数部分:

例如:浮点数 4.8125
整数部分:

小数部分:

将整数与小数部分连接起来就是 100.1101 ,即 =

再如:浮点数 0.05
因为只有小数所以只处理小数部分:

可以看到二进制小数是无法准确表示浮点数的,所以就有了精度一说.
单精度浮点数用32位二进制表示如下:

双精度浮点数用64位二进制表示如下:

由上可知,
单精度浮点数精度为 pow(2,23) = 8388608 = 0.8388608 x pow(10,7)
所以单精度浮点数对应的10进制精度为 7 位多
双精度浮点数精度为 pow(2,52)-1 = 4503599627370496 = 0.4503599627370496 x pow(10,16)
所以双精度浮点数对应的10进制精度为 16 位多

移码(又叫增码)是由补码的符号位取反得到,一般用指数的移码减去1来做浮点数的阶码,
引入的目的是便于浮点数运算时的对阶操作。为了保证浮点数的机器零为全0。

对于定点整数,计算机一般采用补码的来存储。
正整数的符号位为 0,反码、补码、原码都一样。
负整数的符号位为 1,原码、反码和补码的表示各不相同,

由原码变成反码和补码有如下规则:

浮点数二进制表示:

比如十进制4.5的单精度浮点数的二进制 = 表示为上述公式则为

看到这里的 E 为 2 ,那么它在计算机实际存储为 2 + 127 = 129 =

根据上面的公式各部分表示的规则得到一个32位浮点数表示如下表:

符号位为 0 表示是正数,所以 4.5 的二进制存储为 0 10000001 00100000000000000000000 ,即 = 0x40900000

以下 tool.c 是一个测试工具:

下面是我们把上述二进制转为二进制浮点数

如果得到阶码是负数比如下面的 0.5 和 0.05 ,规则是先在首位补 1 ,然后向左移动小数点,不够补 0

综上我们知道
阶码为正小数点 右移 ,先移动小数点再补 1 。
阶码为负小数点 左移 ,先补 1 再移动小数点,不足补 0

二进制浮点数转10进制浮点数,这里是单精度,双精度同理

根据公式定义:

0.15625 二进制表示如下:

转换如下:

IEEE754 Wiki
单精度浮点数
双精度浮点数
浮点数表示
二进制浮点数在线转换

  • 娴偣鏁鍦璁$畻鏈轰腑鏄浣琛ㄧず鐨?
    绛旓細娴偣鏁板湪璁$畻鏈轰腑鏄敤浠ヨ繎浼艰〃绀轰换鎰忔煇涓疄鏁銆傚叿浣撶殑璇达紝杩欎釜瀹炴暟鐢变竴涓暣鏁版垨瀹氱偣鏁帮紙鍗冲熬鏁帮級涔樹互鏌愪釜鍩烘暟锛堣绠楁満涓氬父鏄2锛夈傛诞鐐硅绠楁槸鎸囨诞鐐规暟鍙備笌鐨勮繍绠楋紝杩欑杩愮畻閫氬父浼撮殢鐫鍥犱负鏃犳硶琛ㄧず鑰岃繘琛岀殑杩戜技鎴栬垗鍏ャ備竴涓诞鐐规暟a鐢变袱涓暟m鍜宔鏉ヨ〃绀猴細a = m 脳 b^e銆傚湪浠绘剰涓涓繖鏍风殑绯荤粺涓紝鎴...
  • 娴偣鏁鍦璁$畻鏈轰腑鏄浣琛ㄧず鐨?
    绛旓細娴偣鐢变竴涓暣鏁版垨瀹氱偣鏁帮紙鍗冲熬鏁帮級涔樹互鏌愪釜鍩烘暟锛堣绠楁満涓氬父鏄2锛夌殑鏁存暟娆″箓寰楀埌锛岃繖绉嶈〃绀烘柟娉曠被浼间簬鍩烘暟涓10鐨勭瀛﹁鏁版硶銆傛诞鐐规暟a鐢变袱涓暟m鍜宔鏉ヨ〃绀猴細a = m 脳 b^e(b鐨別娆℃柟锛夈傜壒鍒暟鍊 姝ゅ锛屾诞鐐规暟琛ㄧず娉曢氬父杩樺寘鎷竴浜涚壒鍒殑鏁板硷細+鈭炲拰−鈭烇紙姝h礋鏃犵┓澶э級浠ュ強NaN锛'Not a N...
  • 璁$畻鏈轰腑娴偣鏁扮殑琛ㄧず
    绛旓細鍙互鐪嬪埌浜岃繘鍒跺皬鏁版槸鏃犳硶鍑嗙‘琛ㄧず娴偣鏁扮殑锛屾墍浠ュ氨鏈変簡绮惧害涓璇.鍗曠簿搴︽诞鐐规暟鐢32浣嶄簩杩涘埗琛ㄧず濡備笅锛氬弻绮惧害娴偣鏁扮敤64浣嶄簩杩涘埗琛ㄧず濡備笅锛氱敱涓婂彲鐭ワ紝鍗曠簿搴︽诞鐐规暟绮惧害涓 pow(2,23) = 8388608 = 0.8388608 x pow(10,7)鎵浠ュ崟绮惧害娴偣鏁板搴旂殑10杩涘埗绮惧害涓 7 浣嶅 鍙岀簿搴︽诞鐐规暟绮惧害涓 pow(...
  • 娴偣鏁鍦璁$畻鏈轰腑鏄浣琛ㄧず鐨
    绛旓細娴偣鏁板湪璁$畻鏈轰腑閫氬父閲囩敤浜岃繘鍒惰〃绀烘硶銆傚叿浣撴潵璇达紝娴偣鏁扮敱涓ら儴鍒嗙粍鎴愶細灏炬暟鍜屾寚鏁般傚熬鏁拌〃绀烘暟瀛楃殑瀹為檯鍊硷紝閫氬父涓哄皬鏁伴儴鍒嗐傛寚鏁板垯琛ㄧず鏁板瓧鐨勮妯℃垨绮惧害銆傝绠楁満鍐呴儴浣跨敤鍥哄畾鐐规垨娴姩鐐规潵琛ㄧず娴偣鏁帮紝涓昏鍙栧喅浜庡鐞嗗櫒鍜屾搷浣滅郴缁熺殑璁捐銆備负浜嗗噯纭湴琛ㄧず娴偣鏁帮紝鎴戜滑闇瑕佸鐞嗗嚑涓叧閿棶棰橈紝鍖呮嫭绮惧害闂銆佹孩鍑...
  • 璁$畻鏈轰腑鐨勬诞鐐规暟琛ㄧず
    绛旓細琛ㄧず涓涓诞鐐规暟 IEEE 754瑙勫畾锛屾暟瀛楃郴缁熶腑鐨勬诞鐐规暟鏄鏁板涓皬鏁扮殑杩戜技锛屽悓鏃惰瀹氳〃杈炬诞鐐规暟鐨0锛1搴忓垪琚垎涓轰笁閮ㄥ垎锛堜笁涓尯鍩燂級瀵逛簬32浣嶅崟绮惧害娴偣鏁版潵璇达紝exponent鐨勫搴︿负8锛宖raction浣嶅搴︿负23琛ㄧず瀹為檯鐨勫糓 琛ㄧず瑙勫垯锛氬125.125 10 瀵逛簬 64浣嶅弻绮惧害娴偣鏁 鏉ヨ锛 exponent 娈典负 11 浣嶏紝 ...
  • 璁$畻鏈轰腑鐨勬诞鐐规暟琛ㄧず鐢变袱閮ㄥ垎缁勬垚
    绛旓細璁$畻鏈轰腑鐨勬诞鐐规暟琛ㄧず鐢变袱閮ㄥ垎缁勬垚锛氶樁鐮佸拰灏炬暟銆娴偣鏁扮殑琛ㄧず褰㈠紡锛歂=M脳RC鍏紡涓璕琛ㄧず瀵瑰簲鐨勮繘鍒舵暟鐨勫熀鏁般傜敱姝ゅ彲瑙侊紝姣忎釜娴偣鏁癗鍙互鐢ㄥ熬鏁癕鍜岄樁鐮丆琛ㄧず銆傝鏈変袱涓诞鐐规暟x鍜寉锛屽畠浠垎鍒负锛歺=Mx*2^Ex銆亂=My*2^Ey銆傚叾涓璄x鍜孍y鍒嗗埆涓烘暟x鍜寉鐨勯樁鐮侊紝Mx鍜孧y涓烘暟x鍜寉鐨勫熬鏁般備袱娴偣鏁拌繘琛屽姞娉...
  • 娴偣鏁鍦璁$畻鏈轰腑鏄浣琛ㄧず鐨?
    绛旓細1涓鸿礋鏁般傚拰鍘熺爜鍦拌寰嬩竴鏍凤級鍙嶇爜锛屾鏁颁笉鍙橈紝璐熸暟瀵规瘡涓浣嶁樺彇鍙嶁欏嵆鍙紝0.11锛0.75锛1.10锛-0.25锛堝嵆0.01鍦扮浉鍙嶆暟锛夌Щ鐮侊細1.01锛0.25锛岃0.01锛-0.75 绉荤爜澶嶆潅涓鐐癸紝浠鐨勮〃绀鏂规硶鏄細 绉荤爜锛 2^闃剁爜浣嶆暟 锛 鐪熷硷紙鐪熷硷細鎸囧師鏉ラ偅涓樺腐绗﹀彿鏁扳欙紝娉ㄦ剰瑕佹妸鎶婃鍓彿甯﹀叆璁$畻锛...
  • 璁$畻鏈轰腑鐨鏁版槸鐢娴偣鏁拌〃绀鐨勩
    绛旓細1銆娴偣琛ㄧず娉曚腑锛屽疄鏁板彲浠ュ啓浣滀袱閮紝灏炬暟锛坢antissa锛夊拰鎸囨暟锛坋xponent锛夈傚熬鏁版槸涓涓皬鏁帮紝鑰屾寚鏁版槸涓涓暣鏁般傝繖涓ら儴鍒嗙粨鍚堣捣鏉ュ氨鑳借〃绀烘墍鏈夌殑瀹炴暟銆備緥濡傦紝鎴戜滑鍙互鐢ㄦ诞鐐硅〃绀烘硶鏉琛ㄧず鏁板瓧3.14159銆2銆佽繖绉嶈〃绀烘硶鏈夊緢澶氫紭鐐广傞瀹冨厑璁璁$畻鏈鸿〃绀闈炲父澶у拰闈炲父灏忕殑鏁板瓧銆傚叾娆★紝瀹冨厑璁歌绠楁満琛ㄧず鍒嗘暟鍜屽皬鏁帮紝杩...
  • 璁$畻鏈轰腑鐨勬诞鐐规暟鏄粈涔?
    绛旓細娴偣鏁帮紝鏄睘浜庢湁鐞嗘暟涓煇鐗瑰畾瀛愰泦鐨勬暟鐨勬暟瀛楄〃绀猴紝鍦ㄨ绠楁満涓敤浠ヨ繎浼艰〃绀轰换鎰忔煇涓疄鏁銆傚叿浣撶殑璇达紝杩欎釜瀹炴暟鐢变竴涓暣鏁版垨瀹氱偣鏁帮紙鍗冲熬鏁帮級涔樹互鏌愪釜鍩烘暟锛堣绠楁満涓氬父鏄2锛夌殑鏁存暟娆″箓寰楀埌锛岃繖绉嶈〃绀烘柟娉曠被浼间簬鍩烘暟涓10鐨勭瀛﹁鏁版硶銆傛诞鐐规暟骞朵笉涓瀹氱瓑浜庡皬鏁帮紝瀹氱偣鏁颁篃骞朵笉涓瀹氬氨鏄暣鏁般傛墍璋撴诞鐐规暟灏辨槸...
  • 璁$畻鏈缁勬垚鍘熺悊鈥斺娴偣鏁拌〃绀鏂规硶
    绛旓細璁$畻鏈轰腑琛ㄧず娴偣鏁扮殑瀛楅暱閫氬父涓32浣嶏紝鍏朵腑7浣嶄綔闃剁爜锛1浣嶄负闃剁锛23浣嶅熬鏁帮紝1浣嶄綔鏁扮 渚嬪鐢2涓瓧鑺傝〃绀轰竴涓诞鐐规暟锛32鍐欒捣鏉ラ夯鐑︼紝鎵浠ョ敤2涓瓧鑺傚氨鏄16浣嶆潵涓句緥锛屽懙鍛靛笇鏈涜皡瑙o級 锛72.45x10^5)D鍏堟崲鎴愭櫘閫氫簩杩涘埗鏁帮紙11011101000110011001000锛塀 鐒跺悗寮濮嬪儚鍗佽繘鍒舵暟鐨勭瀛﹁鏁版硶閭f牱鍐欐垚绾︾瓑浜庯紙0...
  • 扩展阅读:浮点数在线计算器 ... 正确的浮点数表示方法 ... 算sin度数的计算器 ... python浮点数 ... 浮点数的表示举例 ... 浮点数的机器数表示 ... 浮点数表示法图解 ... 浮点数实例100例 ... 当今世界最快的计算机 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网