C核心技术手册(十六)

2.3 浮点类型

C也支持特殊的数字类型,计算中使用的标准浮点类型(实数)如下所列:

l Folat

定义单精度变量

l Double

定义双精度变量

l Long double

定义扩展精度变量

一个浮点值能被以有限的精度存储,这取决于表示它的二进制格式和存储它使用的内存的大小,精度以有效数的个数来表示,例如精度为6个小数位”6位精度的意思是此类型的二进制表示足够精确,可以存储一个具有6个小数位的实数。小数点的位置没有关系,并且小数据点前后的0不计算在这6个数中,数值123,456,0000.00123456都可存储在一个6位精度的类型中。

C中,浮点型运算在内部被当做double或更高的精度类型处理,例如,下面的计算使用double类型。

float height = 1.2345, width = 2.3456; // Float variables have single // precision. double area = height * width; // The actual calculation is // performed with double // (or greater) precision.

如果将结果赋值给一个float型变量,它的值会被四舍五入,关于数据中的浮点型讨论,可参见15章的math.h

关于浮点型的存储大小和二进制格式,C仅定义了最小的要求,但是,通常使用的格式是IEC1989年标准中定义的,通过查看宏__STDC_IEC_559__,可以判断C编译器是否支持IEC的浮点型标准。Table 2-6中列举了IEC60599中浮点型实数的取值范围和精度,使用十进法表示。

Table 2-6. Real floating-point type

Type

Storage size

Value range

Smallest positive value

Precision

float

4 bytes

±3.4E+38

1.2E-38

6 digits

double

8 bytes

±1.7E+308

2.3E-308

15 digits

long double

10 bytes

±1.1E+4932

3.4E-4932

19 digits

头文件float.h定义的宏允许你在程序中使用这些值或其他细节来表示实数的二进制表示。FLT_MIN, FLT_MAXFLT_DIG指出float 类型的取值范围和精度,相应地,doublelong double类型的宏以DBL_LDBL_为前缀。这类的宏及浮点数的二进制表示将在第15章的float.h中描述。

Example 2-2中的程序开始打印float型的一些典型值,接着,描述了将一个浮点数存放在float类型变量中四舍五入引起的错误。

Example 2-2. Illustrating the precision of type float

#include <stdio.h> #include <float.h> int main( ) { puts("/nCharacteristics of the type float/n"); printf("Storage size: %d bytes/n" "Smallest positive value: %E/n" "Greatest positive value: %E/n" "Precision: %d decimal digits/n", sizeof(float), FLT_MIN, FLT_MAX, FLT_DIG); puts("/nAn example of float precision:/n"); double d_var = 12345.6; // A variable of type double. float f_var = (float)d_var; // Initializes the float // variable with the value of d_var. printf("The floating-point number " "%18.10f/n", d_var); printf("has been stored in a variable/n" "of type float as the value " "%18.10f/n", f_var); printf("The rounding error is " "%18.10f/n", d_var - f_var); return 0; }

程序的最后一部分将输出以下内容:

The floating-point number 12345.6000000000 has been stored in a variable of type float as the value 12345.5996093750 The rounding error is 0.0003906250

在本例中,离十进制12,345.6最近的数为12,345.5996093750,这看起来不像是一个十进法的四舍五入,但在内部浮点型的二进制表示中,它的确是,而12,345.60则不是。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值