1前言当我们学习C语言时,我们通常认为浮点数和小数是等效的,没有严格的区分它们的概念。
这不会影响我们的学习,因为浮点数和小数是绑定在一起的。
,只有小数点以浮点格式存储。
实际上,整数和十进制都可以以定点格式存储,或者都可以以浮点格式存储,但实际情况是C语言使用定点格式存储整数,而浮点格式存储小数位,在“数字范围”内寻求两个重要指标“”之间平衡的结果。
和“数值精度”。
2什么是浮点数?浮点数仅表示实数。
浮点数在计算机中用于近似任何实数。
具体来说,通过将整数或定点数(即尾数)乘以某个基数(在计算机中通常为2)的整数次幂来获得此实数。
这种表示方法类似于以10为基础的科学表示法。
3将浮点数存储在内存中首先,很明显,整数,浮点或字符等数据类型以二进制模式存储在计算机的底部。
浮点数在内存中的存储方式不同于整数,因为整数可以一一对应地转换为二进制数据。
浮点数的存储由符号+指数+分数组成。
类型符号位指数尾数浮点数1位(No.31)8位(No.23至30)23位(No.0至22)双精度1位(No.63)11位(No.52至62)52位(第0〜51位)Int和float也占用了四个字节的内存,但是float可以表示的最大值比int大得多。
根本原因是浮点数以指数形式存储在内存中。
将浮点数转换为内存的步骤分为以下三个步骤:将浮点数转换为二进制数,以科学计数法表示二进制浮点数,并计算指数偏移后的值。
对于第三点:在计算指数时需要添加偏移量。
(我将在后面介绍为什么使用偏移量),并且偏移量的值与浮点数的类型有关(浮点偏移量值为127,双偏移量值为1023)。
例如,对于指数6,float和double类型的偏移量值为:float:127 + 6 = 133 double:1023 + 6 = 1029 4浮点数19.625如何与float一起存储的示例:将浮点数转换为二进制:10011.101(将19.625的整数部分除以2得到余数,将小数部分除以2进行舍入);使用科学计数法表示二进制浮点数:1.0011101 * 2 ^ 4;计算指数偏移的值:127 + 4 = 131(10000011);马赛克总结起来,内存中的float类型19.625的值为:0-10000011-001 1101 0000 0000 00000000。
5 float和double的范围和精度float和double的范围由指数中的位数确定。
(因为表示形式为1.x * 2 ^ Y,所以忽略了1.x的影响,并且指数直接用于表示浮点数的范围)float:1位(符号位)8位(指数位)23bits(尾数位)double:1bit(符号位)11bits(指数位)52bits(尾数位)因此float的指数范围是-127〜+ 128,double的指数范围是-1023 〜+ 1024,并且指数位以代码形式补充。
负指数确定浮点数可以表示的具有最小绝对值的非零数。
正指数决定了浮点数可以表示的绝对值最大的数,也决定了浮点数的取值范围。
浮动范围是-2 ^ 128〜+ 2 ^ 128,即-3.40E + 38〜+ 3.40E + 38; double的范围是-2 ^ 1024〜+ 2 ^ 1024,即-1.79E + 308〜+ 1.79E + 308。
精度浮点数和双精度数的精度取决于尾数的位数。
尾数表示小数点后的有效位数越多,精度越高。
根据科学记数法将浮点数存储在存储器中,并且整数部分始终是隐式的“ 1”。
由于它是常数,因此不会影响精度。
float:2 ^ 23 = 8388608,共7位数字,表示最多可以有7位有效数字,但绝对可以保证6位数字,即float的精度为6〜7位有效数字; double:2 ^ 52 = 4503599627370496,总共16位数字。
同样,double的精度为15-16位。
6解剖:为什么要使用偏移量方法来计算索引?如果