c语言数据精度
㈠ c语言中单精度和双精度浮点型数据的数值范围是多少怎么算出来的请大虾帮忙了!
今天看书也是发现了这个问题但是网络一番网上并没有想要的答案,思索后得出结果,首先浮点型是32位精度 有一个符号位8个指数位23个尾数位
关于精度的计算单精度8位阶码,1位符号,剩下23位尾数,算出2的负23次方,得到0.00000011920928955078125
前面0有多少个,就表示能精确到那一位,所以精度为6提供七位有效数字
双精度11位阶码,1位符号,剩下52位尾数,算出2的负52次方,得到0.
所以精度为15,提供16位有效数字。
然后关于范围的计算:范围是指数位控制的,指数位为8,有效为为7(这里涉及到余码,有兴趣的同学可以查看相关资料)所以最大范围为2^7=128 这里是指数部分 化为十进制则为
2^128=3.402823669384635E38
所以范围为3.4E-38~3.4E+38
double同理
㈡ C语言中数据的精度是什么意思
c语言中:
float浮点数7位有效数字。
double双精度数16位有效数字。
单精度数的尾数用23位存储,加上默认的小数
点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 <
10^8,所以说单精度浮点数的有效位数是7位。 双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16
< 9007199254740992 < 10^17,所以双精度的有效位数是16位
单精度浮点数的实际有效精度为24
位二进制,这相当于 24*log102≈7.2
位10进制的精度,所以平时我们说“单精度浮点数具有7位精度”。(精度的理解:当从1.000...02变化为1.000...12时,变动范围为
2-23,考虑到因为四舍五入而得到的1倍精度提高,所以单精度浮点数可以反映2-24的数值变化,即24位二进制精度)
浮点数7位有效数字。(应该是单精度数)
双精度数16位有效数字。
浮点数取值范围:
负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。
双精度数取值范围:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。
所以精度是测量值与真值的接近程度。包含精密度和准确度两个方面精度的等级是以它的允许误差占表盘刻度值的百分数来划分的,其精度等级数越大允许误差占表盘刻度极限值越大。量程越大,同样精度等级的,它测得压力值的绝对值允许误差越大。
精度
经常使用的的精度为 2.5 、1.5 级,如果是1.0和0.5级的属于高精度,现在有的数字已经达到0.25级。
㈢ 用c语言编了一个程序,最后输出的数据精度不够,怎么办
控制数据的输出精度:例如%.5f,控制输出小数点后有五位小数的浮点数,希望可以帮到你!
㈣ c语言 精度问题
void print_double(double n)
{
static char buf[32];
snprintf(buf, sizeof(buf), "%lf", n);
char *p = buf + strlen(buf);
while (*p == '0') *p-- = 0;
printf("%s", buf);
}
㈤ C语言什么是单精度、双精度
C语言中用float描述单精度,用double描述双精度。为什么要把数据分成单双精度呢?我们生活中通常用到数据时会说精确到小数点后几位,计算机存储数据时精确度越高,占用内存空间越大,根据精确度的需要,如果你选用单精度数据,是说你让电脑用较少的空间存放数据,表现为精确到小数点后5位,并且第五个小数还是四舍五入得到的,如果你用双精度定义数据,是说你用较多的空间存放同一个数,表现为小数点后较多的位数,同样最后一位仍然是四舍五入得到。这就是区分单双精度的原因。
㈥ 如何提高c语言精确度
1.规定明确的数据类型(int、double、float)
2.用
Math
里的函数舍去或补齐
3.麻烦一点、设定数据偏移量,在舍去或补齐编译量范围内的数据
比如
偏移量为
0.001
if
(0.800000011 -
0.800 <
0.001
*
5)
{
0.800000011 =
0.800;
}
else
{
0.800000011 =
0.800
+
0.001;
}
至于
0.800
这个数是怎么取的
方法有很多
可以截取字符串,可以计算,可以用Math里的函数
计算的方法
:
0.800000011 -
0.800000011 %
0.001
计算过程中一定要明确数据类型,数据类型越明确误差越小
㈦ c语言数据类型中“双精度”“单精度”是什么意思
1、单精度和双精度都指浮点数,就是带小数点的数
2、单精度数的有效位数比较少,7位左右,双精度的在几十位。
3、单精度定义是用float
4、双精度定义是用double
比如:
#include
main(){
float
pi_f
=
m_pi;
double
pi_d
=
m_pi;
printf("%e,",pi_f);
printf("%e",pi_d);
}
㈧ C中的float和double的有效数字和精度各是多少
float和double是有IEEE标准的,不是C语言定的,其它语言也一样。
double型90%的情况下有效位是16位的10进制数据是对的。来一段lua程序:
local b= 9007199254740991
print("b="..string.format("%d", b))
for i=1,10 do
print("i="..i..",b+i="..string.format("%d", b+i))--打印的全是偶数
end
for i=1,10 do
print("i="..i..",b-i="..string.format("%d", b-i))--打印正确
end
由此可见,大于9007199254740991(2进制52位最大的数),从2^53开始误差就大于1。
㈨ C语言的单精度与双精度如何区别
其实就是有效位数不一样。
浮点型变量分为单精度(float)、双精度(double)和长双精度(longdouble)3类。在TurboC中:
比特(位)数有效数字
float326-7
double6415-16
longdouble12818-19
ANSIC并未具体规定每种类型数据的长度、精度、数值范围,有的系统将double所增加的32位全用于存放小数部分,这样可以增加数值的有效范围,减少舍入误差。有的系统则将所增加的位(bit)一部分存放指数部分,这样可以扩大数值范围