如何把C++中的float型数据在doublefloat内存存储中的存储形式直接输出

float型和double型的数在计算机中是怎么存储的? [问题点数:0分]

至于二者在内存中怎么存储,这比较复杂

学过计算机组成原理(或者计算机文化基础)你就该知道浮点数的表示是比较复杂的

找一本《计算机组成原理》原理的书看一下

有很多标准的,不过一般用的是:IEEE(是这个吗?)标准

最高位是符号位,然后是用移码表示的指数位若干,最后是数据位若干

float的指数好象是8位(-128~127),然后23位是数据位

double就记不清了……

存储的时候好象是按这样的顺序存储的:

符号(1位)+小数点(1位)+有效数字(两种类型规定的有效数字位数)+E(1位)+指数(视编译器而定)

应该是看你具体的机器不同而变化,用sizeof(*)可以查看具体细节。

存储的时候好象是按这样的顺序存储的:

符号(1位)+小数点(1位)+有效数字(两种类型规定的有效数字位数)+E(1位)+指数(视编译器而定)"

不对哦,ASCII C没有定义关于浮点的机器标准的,而且存储的时候,那来的小数点和E啊……

楼上的iicup才是正解:

不过对于iicpu有一点小疑问,个人感觉double 的R64.53是不是表示范围还是有些小啊……

不过不想查书了……呵呵

不同的编译环境下有不同的变化!

float一般占4个字节,精度到小数点后6位

double一般占8个字节,精度到小数点后的10位!

不过,每种机器和环境下是不同的,所以还要看情况决定

double的精度好象是15位左右吧!

不同的编译环境下有不同的变化!

float一般占4个字节,精度到小数点后6位

double一般占8个字节,精度到小数点后的10位!

不过,每种机器和环境下是不同的,所以还要看情况决定

错误,应该是不同的CPU有不同的变化,你所说的不同编译环境而有不同,那个是很久远的时候的事情了,那个时候没有FPU,浮点运算都是模拟的,所以和编译环境相关

在现在,因为CPU内部提供浮点运算指令集,所以都是相同的了,如果不同,那么可以说编译器有问题!

还有,我所知道的INTER 和 AMD的浮点数都是那种IEEE标准的,以前微软搞了套自己的标准,结果最后惨淡收场,因为没有谁支持……

匿名用户不能发表回复!
}

浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入。但是这种设计的好处是可以在固定的长度上存储更大范围的数。
1、将字符串转换为float、double过程存在精度损失,只是float、double各自损失的精度不相同而已

2、将float、double转换为字符过程中可能存在精度损失,但是通过%.8lf可以规避
(1)float小数点前后加起来有效数字只有6位。当给定的float有效数在6位以内转换为字符不会丢失精度,当有效位数大于6位就会存在精度丢失

 
 
 
 
 
(2)double小数前后加起来的有效数字只有16位,当给定的double有效数在16位以内转换为字符串不会丢失精度,当有效位数大于16位湖影公寓存在精度丢失
 
 
 
 
3、浮点数比较
用”==”来比较两个double应该相等的类型,返回真值完全是不确定的。计算机对浮点数的进行计算的原理是只保证必要精度内正确即可。
我们在判断浮点数相等时,推荐用范围来确定,若x在某一范围内,我们就认为相等,至于范围怎么定义,要看实际情况而已了,float,和double 各有不同
所以const float EPSINON = 0.00001;
if((x >= - EPSINON) && (x <= EPSINON) 这样判断是可取的至于为什么取0.00001,可以自己按实际情况定义。


比如要判断浮点数floatA和B是否相等:

}

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1]  目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

double类型变量C语言里输出时的格式说明符是%f。

float和double类型的输出时的格式说明符都是%f,这是由于向那些未在原型中申明参数类型的函数传递参数时,float型会自动转为double型,所以用%lf和%f结果都一样。

1、双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C/C++中表示实型变量的一种变量类型。

2、此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为-3.4E38~3.4E+38,;双精度型占8 个字节(64位)内存空间,其数值范围为-1.7E308~+1.7E308。

对于double类型变量,其输出时的格式说明符一般用 %lf 

因为double型是双精度浮点型,所以用long float型的格式输出符 %lf

而对于单精度浮点型float, 其输出格式说明符一般用%f

float和double类型的都是%f,这是由于向那些未在原型中申明参数类型的函数传递参数时,float型会自动转为double型,所以用%lf和%f结果都一样。

楼上的答案错的,根据c标准,

}

我要回帖

更多关于 doublefloat内存存储 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信