关于C语言float

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言float相关的知识,希望对你有一定的参考价值。

float型数据的舍入误差
是潭浩强的书.第3版.
还有,定义FLOAT算1/4,为什么等于0而不是0.25?
INT肯定是等于0的,FLOAT为什么也等于0.

书上说
a=123456.789e5;
b=a+20;
printf("f/n",b);

这里的误差我能懂,因为精确位数的问题.
书上还说用程序计算1.0/3.0*3的结果并不等于1.但是我TURBO C算出1了.
1.0/3.0*3不存在这样的问题吧.
我用的是Turbo C&C++ 3 英文版.
还有,1/4为什么等于0?也是FLOAT型.
如果INT型=0我能理解,FLOAT为什么也等于0,而不是0.25??
回答一下谢谢
书上还说用程序计算1.0/3.0*3的结果并不等于1.但是我TURBO C算出1了.

azheng757大哥,最后一个疑问了.为什么
printf("%d",1.0/3.0*3);
0
算的结果=0?
这样不也是先转化为精度高的吗?
我是自学的...

意思是
1/3=0.333333333........
再0.33333333.......*3=0.999999999999999999.....
是吗?
突然想起来,以前想过的一个问题.
1/3*3=1
却0.3333333333...*3=0.999999999....
晕死.1和0.999999....怎么看也是1大 = =!!
吐血身亡.

你如果是这样定义
float m=1/4;
则m=0.00
1 4皆为整型,按整型计算得0,再转为实型赋值
若定义
float m=1.0/4;float m=1/4.0;float m=1.0/4.0;
m=0.25
最后一个不用说
前两个类型不匹配,在这种情况下,都先转化为精度高的,即实型,再运算,最后再将运算结果转化为定义变量的类型即实型赋值

printf("%f",1.0/3.0*3);
1.000000
printf("%d",1.0/3.0*3);
0
你可能是这样算的
int a=1.0/3.0*3;
printf("%d",a);
1

没错,是转化为精度高的浮点数,结果也是实型的,
但你知道实型是有误差的,即使精度很高,可能结果是0.999999……
但不是1,对其取整,结果还是0,它只会舍不会入

我想是吧
参考技术A 应该为1.0/4.0

关于C语言中double型输出的问题

参考技术A

%f格式化命令,float,double 默认只输出6位小数。

但是float,double可以表示的浮点数范围及精度是不同的。

例如1653

float a = 1.123456;

float b = 1.12345679;

例如:

ble占8字节 对应的格式为%lf

float占4字节 对应的格式为%f

当两个格式用反时,会造成程序读取数据并赋值时1653,赋值给变量时字节信息错位,导致数据错误。

float 存储数据格式为:1位的符号位+8位的指数位+23位尾数

double存储数据格式为:1位的符号位+11位的指数位+52位尾数

因此,错位存储的数据,解释输出来就差别非常大了。

扩展资料:

Data Output Stream类用于将Java语言中的基本类型数据写入输出流,如byte、int、float和boolean等类型。该类定义了许多以write开头,后面跟数据类型的方法,这些方法用于将指定数据类型的数据写入输出流,如下所示。

(1)writeBoolean():写boolean类型数据。

(2)writeByte():写byte类型数据。

(3)writeCliat():写char类型数据。

(4)writeDouble():写double类型数据。

(5)writeFloat():写float类型数据。

(6)writeInt():写int类型数据。

参考资料来源:百度百科-数据输出流

以上是关于关于C语言float的主要内容,如果未能解决你的问题,请参考以下文章

关于运用c语言出30道不重复的四则运算

C语言----结构体,枚举,共用体

帮忙解释这段c++语言

求助一个C语言问题 为啥在VC中老是提示我 warning C4101: 'c' : unreferenced local variable

C语言实现矩阵乘法

c语言判断三角形