1. c语言中float精度问题
浮点数不是连续值,有一定精度,特点是动态范围大。它还没有int的精度高,因为int是32位表示,float只有23位有效值,其他是符号位和指数。
既然计算得不到12.10,就是浮点数不能精确表示12.10。
c
=
12.099998精度也很高了,只差0.000002,差值很小了
2. c语言里面的双精度型和长精度型有什么区别
其实就是有效位数不一样。
浮点型变量分为单精度(float)、双精度(double)和长双精度(long double)3类。在Turbo C 中:
比特(位)数 有效数字
float 32 6-7
double 64 15-16
long double 128 18-19
ANSI C 并未具体规定每种类型数据的长度、精度、数值范围,有的系统将double所增加的32位全用于存放小数部分,这样可以增加数值的有效范围,减少舍入误差。有的系统则将所增加的位(bit)一部分存放指数部分,这样可以扩大数值范围
3. c语言精度问题:是什么意思干什么的
基本上同意楼上的,不过,原程序:
return(x>eps)-(x<-eps) 的意思是X如果小于eps,那么返回值为0,这个写法是没有问题的。
4. 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);
}
5. C语言%f精确度的问题
float提供7位有效位,这七位包括小数点,后面不足六位小数补0。
应为float型数占4个字节,一个字节占8位,总共就是32位,能达到这么大的。
6. C语言出入数据精度
更主要是没有必要,输出需要规定精度是因为人不能手工参与。而输入时,你键入的数是由你控制的,为什么还要计算机额外控制精度?
7. C语言精度问题
要规定一个精度 eps。严格说 1.4142 不等于 2 的平方根,本身就有误差 0.0001。
实数比较 用误差的绝对值 小于一个很小的数。
#include <math.h>
float a=1.0,b=1.0,c=1.4142;
float eps=0.0001; // 例如给 0.0001
if ( (fabs(a*a + b*b - c*c) < eps) ||
(fabs(b*b + c*c - a*a) < eps) ||
(fabs(c*c + a*a - b*b) < eps) ) printf("It is ....\n");
8. c语言域宽与精度
首先知道%e是按科学记数法输出值(%E同%e),1.23e+001的意思是1.23*10^1,+表示正号,对比一下这几个输出:
#include<stdio.h>
voidmain()
{
floatx=12.34;
printf("1.x=%e ",x); //1.直接按科学计数法表示:1.234*10^1
printf("2.x=%10.2f ",x);//2.按单精度浮点型输出,按10位的宽度输出,小数点后保留2位,多出的位数前边默认补空格
printf("3.x=%010.2f ",x);//3.按单精度浮点型输出,按10位的宽度输出,小数点后保留2位,多出的位数前边补0
printf("4.x=%10.2e数一下,包括空格在内一共10位,小数点后保留2位 ",x);//4.按科学计数法输出,按10位的宽度输出,小数点后保留2位,多出的位数前边默认补空格
printf("5.x=%2f ",x); //5.按单精度浮点型输出,按2位的宽度输出,若x的长度不足2,则左补空格,大于2保持正常输出,这里显然x的宽度大于2了,故直接按单精度浮点型输出
printf("6.x=%2E ",x); //6.同5,只是按科学计数法输出
}
运行结果比对一下:
9. C语言数据类型小数精度问题!!!急
涉及到双精度浮点数在内存中的实现过程。双精度浮点数有三个部分,符号位、11位阶码、52位尾数。在做乘100之类的操作时,由于阶码增大,尾数要右移,会造成精度丢失。简单来说,此时内存中存储的数字是9.9999999......,但输出到屏幕上时,由于保留6位,显示为10.000000。而浮点数转整数类型时只保留整数部分,因此9.999999......强制类型转换后等于9。
要解决这个问题,可以人工四舍五入,即输出(long)(TEM+0.5)的值