当前位置:首页 > 生活资讯 > 正文内容

double和float区别(double和float有啥区别)

2023-04-18 15:54:03生活资讯1

double和float有啥区别

区别就是它们意思是不一样具体的不同如下

int是整形

float是浮点型

double是双浮点型范围比float大些最简单的说明就是int是用作整数,float与double是用作小数

double和float的用法

double用作形容词的基本意思是“双的”,其所修饰的名词一般为单数。用作动词的基本意思是“对折起来”。作名词的基本意思是“两倍,双份”。

使用printf时,它们具有相同的格式说明符,但使用scanf时,它们没有相同的格式说明符。

为什么是这样?因为printf的参数被提升,而scanf的参数(作为指针)却不被提升。

这种论点提升到底是什么?当较小尺寸的参数(特别是char,short和float)传递给可变参数函数(如printf之类的函数,其参数数量不固定)时,它们将转换为较大尺寸。Char和short转换为int,float转换为double。

为什么这样 据我所知,纯粹出于历史原因。C的设计师认为这是个好主意,因为这些转换基本上是免费的,因为所有类型的尺寸都足够小,可以放入单个寄存器或堆栈中的单个“单元”(将内容压入堆栈必须与某些字节边界对齐,例如,堆栈上的每个项目都必须以4的倍数的地址开头。同样,显然,这种转换减少了传递参数时的错误。

因此,当您向printf传递float类型的参数时,实际上它会在转换为printf之前就转换为double类型。我们可以使用调试器证明这一点。我写了下面的C代码:

主要功能编译成:

领取关于C/C++更多学习资料:

我在调用printf之前(在地址0x63b处)放了一个断点。根据Linux x86_64调用约定,浮点参数在XMM寄存器中传递(CPU中特殊的小内存位置,可用于对多条数据并行执行同一条指令,但实际上可用于大多数事情) 。因此,我查看了第一个XMM寄存器xmm0,然后:

xmm0中的值之一,当解释为双精度值时,是1,恰好是我们传递给printf的值。同时,当将该寄存器中的值解释为浮点数时,它们是这样(巧合的是,我们得到1.875)。因此,转换确实发生了。这就解释了为什么对于printf,我们在浮点数和双精度参数中都使用%f -浮点数无论如何都会转换为双精度,因此printf不能分辨出两者之间的区别。

同时,scanf的参数是指针,因此不受此转换的限制。其原因是因为所有指针类型仅包含内存地址,并且所有内存地址都具有相同的大小(在我的64位计算机上为64位)。因此,当scanf在其格式字符串中获得%f时,它将期望一个float *类型的指针,而当它获得%lf时,将期望得到double *类型的指针。如果格式说明符和指针的类型不匹配,则会产生一些有趣的结果。

由于float的大小为4个字节,而double的大小为8个字节(至少在我的机器上),因此当我们写入float *类型的指针所指向的位置时,我们将覆盖4个字节的内存。同时,如果我们写入由双*指向的位置,则将覆盖8个字节的内存。考虑以下代码:

printf说明符上的.15标志只是使printf精确度更高。由于我们使用的是双精度值(并且正如我刚刚说的那样,%f也适用于printf的双精度值),因此我们实际上可以访问具有这种精度的数字(只要它们不是太大而不能填充即可。我实际上不是对浮点表示非常了解)

编译并运行后,结果如下:

如您所见,如果我们忽略所有类型的fuckery,则数字应该匹配,但它们甚至不相近。这是为什么?

好吧,我们给scanf%f说明符,所以它期望一个浮点数*。但是我们传递了一个双*。现在,这些指针的实际值都只是地址-scanf不知道它们之间的区别。它进行了下去,读取我们输入的值,并将其存储为float 。但是浮点数仅占用4个字节,因此scanf只会在我们可用的double变量的8个字节中写入4个字节。在我的情况下,由于我的机器是低位字节序的,因此似乎对应于double变量的细粒度(小有效位)数字的第4个字节将被覆盖。因此,当我们打印出double double back时,我们得到的数字几乎与以前相同,但最低有效数字有所变化。

double 和float有什么区别

只是数据类型不同而已,在c语言中数据类型不同,占的内存字节数不同,所以表示数据大小不一样int 占 4个字节 只能表示整数char 占1个字节 只能表示字符float 和double都是表示小数,float占4字节,double 占8字节,表示的数据范围不一样

double和float哪个好

c语言float和double的区别是虽然都表示小数,不过它们的宽度不一样,或者说精度不一样,float是单精度,double是双精度。表示小数的范围不一样,double能表示的范围,比float大。double在内存中,占8个字节,float占4个字节。

c语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐。C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows、macOS、Linux、Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%到20%。因此,C语言可以编写系统软件。

double和float的区别%f

  %d表示输入或输出十进制有符号数;%f表示输入或输出浮点数(float,四字节表示);在C语言中输出不同数据时需要用到不同的格式字符,%d是用来输出十进制整型数据的实际长度输出,%f是以小数形式输出单、双精度度数。以下是详细介绍:  

1、%d表示输入或输出十进制有符号数;  

2、%f表示输入或输出浮点数(float,四字节表示);  

3、另%lf表述输入或输出双精度浮点数(double 8字节表示);  

4、在输出不同数据时要用不同的的格式字符,比如说这个%d是用来输出十进制整型数据的实际长度输出;%f是以小数形式输出单、双精度度数,隐含输出6位小数;还有很多,如%s(输出字符串)

double和float用法区别

double的名词:double、doubles.

double可用作限定词、形容词、副词、动词等。下面是它用作不同词性时的不同用法:

一、用作限定词的用法

double用作限定词时,意为“两倍”,是前位限定词,其用法与其他前位限定词(如倍数词、分数词、以及 all, both, half等)的用法一样,不仅要放在所有形容词的前面,而且要放在中位限定词(如冠词、指示代词、物主代词等)和后位限定词(序数词、基数词等)之前。如:

He got double the sum. 他得到了那个金额的两倍。

They want at least double their salaries. 他们想至少要把工资提高一倍。

Everything was almost double the normal price. 样样东西几乎都是平时价格的两倍。

有时可放在 what从句之前。如:

His income is double what it was five years ago. 他的收入是5年前的两倍。

二、用作形容词的用法

double用作形容词时,它有多个意思:

1. 表示“两倍的”“加倍的”。如:

a double helping 一客双份的食物

I’ll give you double pay for working overtime. 你加班我付你双倍工钱。

2. 表示“双的”“成双的”“双层的”。如:

You mustn’t park on double yellow lines in st1:place w:st="on">England. 在英国双黄线上不许停车。

The room has double doors. 这房间有双层门。

3. 表示“两人用的”“双人的”。如:

We bought a double bed. 我们买了一张双人床。

4. 表示“(意义、标准等)双重的”。如:

The word has a double meaning. 这个词有双重意思。

This switch has a double purpose. 这个开关有双重用途。

三、用作副词的用法

double 用作副词时,有两个意思:一是表示“两人一道地”,二是表示“双倍地”。如:

The two children sleep double. 这两个小孩合睡一床。

The price of many things increased double. 许多东西的价格都上涨了一倍。

注意,用作副词的 double 主要用来修饰动词;若用于修饰形容词,则通常用 doubly 这一副词形式。如:

You’ve got to be doubly careful when you’re driving in fog. 雾天开车你得加倍小心。

四、用作名词的用法

double用作名词,意思比较多,表示“两倍(的数或量)”“加倍之物”“酷似的人或物”“双打”“替身演员”“双从房间”等。如:

I’ll have a double, please. 请给我来一杯双份的。

Ann is the double of her twin sister. 安酷似她的孪生姐姐。

Two doubles were employed for this scene. 拍这个场面雇用了两个替身。

五、用作动词时的用法

double用作动词时,可及物或不及物,意思是“(使)加倍”“对折”。如:

The music doubled in volume. 音乐的声音加大了一倍。

He told me not to double the pages. 他叫我不要折书页。

c语言double和float区别

double是指双精度实型变量。占8 个字节(64位)内存空间。其数值范围为1.7E-308~1.7E+308,双精度完全保证的有效数字是15位,16位只是部分数值有保证。

由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98784681.html