`
hqs7636
  • 浏览: 221042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

浮点数 2.014

阅读更多
6/10更新

无版本差异

浮点数字法:
    浮点数
    浮点数 后缀
    整数 虚数后缀
    整数 浮点后缀 虚数后缀
    整数 实数后缀 虚数后缀

浮点数:
    十进制浮点数
    十六进制浮点数

十进制浮点数:
    多个十进制数字 .
    多个十进制数字 .多个十进制数字
    多个十进制数字 .多个十进制数字 十进制指数
    . 十进制数
    . 十进制数 十进制指数
    多个十进制数字 十进制指数

十进制指数
    e 多个十进制数字
    E 多个十进制数字
    e+ 多个十进制数字
    E+ 多个十进制数字
    e- 多个十进制数字
    E- 多个十进制数字

十六进制浮点数:
    十六进制前缀 多个十六进制数字 .多个十六进制数字 十六进制指数
    十六进制前缀 .多个十六进制数字 十六进制指数
    十六进制前缀 多个十六进制数字 十六进制指数

十六进制前缀:
0x
0X

十六进制指数:
    p 多个十六进制数字
    p+ 多个十六进制数字
    p- 多个十六进制数字

后缀:
    浮点后缀
    实数后缀
    虚数后缀
    浮点后缀 虚数后缀
    实数 虚数后缀

浮点后缀:
    f
    F

实数后缀:
    L

虚数后缀:
    i




浮点数可以使用十进制或者十六进制格式,如同标准 C 一样。

十六进制浮点数以 0x 开头,阶码以 p 或 P 开头,后面跟着以 2 为底的阶数。

浮点数可以内嵌 '_' 字符,它们会被忽略。嵌入的‘_’用来格式化冗长的文字以提高可读
性,例如可以将它们用作千位分隔符:

    123_456.567_8 // 123456.5678
    1_2_3_4_5_6_._5_6_7_8 // 123456.5678
    1_2_3_4_5_6_._5e-6_ // 123456.5e-6

不带后缀浮点文字类型是 double。浮点数可以跟随有一个 f、F 或 L 后缀。
     f 或 F 后缀说明是fload;
     L 代表 real。

如果浮点文字后面跟着 i,那么它就是一个 ireal (虚数) 类型。

示例:
    0x1.FFFFFFFFFFFFFp1023 // double.max
    0x1p-52 // double.epsilon
    1.175494351e-38F // float.min
    6.3i // idouble 6.3
    6.3fi // ifloat 6.3
    6.3Li // ireal 6.3

如果该串文字 超出 了该类型的表示 范围,会被视为错误。如果该串文字取整后可以用该类型的 有效位 数字 表示,就不是错误。

复数文字不是 特征符,而是在语义分析时用 实数 和 虚数 表达式构造的:

4.5 + 6.2i   // 复数







浮点
23.1 浮点运算中间值
在许多计算机上,使用较高精度的运算并不比使用较低精度的运算耗费的时间长,所以为内
部的临时变量采用机器允许的最高精度对于数值运算是有意义的。这里采用的哲学是不强求
语言为统一而采用各种硬件的最低精度,从而充分利用目标硬件的最佳性能。
对于浮点运算表达式的中间值来说,可能会使用高于表达式类型所要求的精度。操作数的类
型只决定最低精度而不是最高精度。实现注意: 例如,在 Intel x86 机器上,计算的中间步
骤最好(但不是必需)使用硬件提供的全部 80 位精度。
如果临时变量和公共子表达式的使用量很大的话,优化后的代码很可能会得到比未优化代码
更精确的解。
算法应该以计算的最小精度为基础。如果实际的精度更高,它们也不应该退化或者失败。同
扩展类型不同,float 或者 double 类型应该用于:
• 减少大型数组的内存消耗
• 在速度比正确性更为重要时
• 保持跟 C 数据和函数参数的兼容性
23.2 浮点常量合拢(Constant Folding)
不管操作数的类型是什么,在 实数 或更大精度的情况下都会完成浮点常量合拢。遵从的规
则就是 IEEE 754 规则,同时也会使用四舍五入原则。
浮点常量被内在地以实现里至少的 实数 精度进行表示,不管该常量的类型。对于常量合拢
也可以使用额外的精度。结果精度的处理会在编译过程中尽可能晚地进行。例如:
const float f = 0.2f;
writefln(f - 0.2);
会输出 0。非常量静态值在编译时不能被传播,因此:
static float f = 0.2f;
writefln(f - 0.2);
会输出 2.98023e-09。在需要那些不会被舍入影响的特定浮点位模式时,也可以使用十六进
制浮点数常量。查找 0.2f 的十六进制值:
import std.stdio;
void main()
{
writefln("%a", 0.2f);
}
结果就是 0x1.99999ap-3。使用十六进制常量:
const float f = 0x1.99999ap-3f;
writefln(f - 0.2);
205
第 23 章 浮点 — 张雪平
输出 2.98023e-09。
不同的编译器设置、优化设置以及内嵌设置都会影响常量合拢(constant folding)的优化,因此
浮点计算的结果可能会由于这些设置而有所不同。
23.3 负数和虚数类型
在现有的语言中,为了将复数类型添加到现存类型体系中可谓费尽周折:模板、结构、运算
符重载等等,并且最终的结果几乎都是失败。失败的原因可能是由于复数运算的语义很微
妙,是由于编译器不理解程序员想要做什么,因而无法对语义的实现进行优化。
所有这些的目的都只是为了避免加入一个新类型。添加一个新类型意味着编译器可以使所有
的复数语义工作“正常”。然后程序员就可以依靠复数的正确(至少是稳定)的实现。
伴随而来的是对虚数的需求。虚数类型是我们可以避开一些微妙的语义问题,并且由于不用
处理隐含的 0 实部,可以提高运算的性能。
虚数文字量有一个 i 作为后缀:
ireal j = 1.3i;
复数文字量没有自身特殊的语法,只需写成实数类型和虚数类型相加即可:
cdouble cd = 3.6 + 4i;
creal c = 4.5 + 2i;
复数、实数和虚数有两个特性:
.re 实数部分(对于虚数则为 0)
.im 虚数部分(对于实数则为 0)
例如:
cd.re 是 4.5 double
cd.im 是 2 double
c.re 是 4.5 real
c.im 是 2 real
j.im 是 1.3 real
j.re 是 0 real
23.4 取整控制
IEEE 754 浮点数算术包括了设置四种不同的取整模式的能力。这些都可以通过在 std.c.fenv
里的函数访问到。
23.5 异常标志
IEEE 754 浮点数算术可以为计算中发生的事件设立标志:
206
第 23 章 浮点
FE_INVALID
FE_DENORMAL
FE_DIVBYZERO
FE_OVERFLOW
FE_UNDERFLOW
FE_INEXACT
这些标志可以使用在 std.c.fenv 里的函数进行设置/重置。

23.6 浮点数比较
除了常用的 <、<=、>、>=、== 和 != 比较运算符外,D 另外提供了专用于浮点数的运算
符。 它们是 !<>=、<>、<>=、!<=、!<、!>=、!>、!<>,并符合 C 扩展 NCEG 的语义。参看“浮点数比较”。
分享到:
评论

相关推荐

    计算机2级C语言考点.pdf

    2. **逻辑短路**: - C语言中的逻辑运算符`&&`和`||`有短路特性。在`&&`表达式中,如果第一个表达式为假,则不会评估第二个表达式;在`||`表达式中,如果第一个表达式为真,则不会评估第二个表达式。 3. **强制...

    python中的decimal类型转换实例详解

    ##### 2. 从字符串创建 使用字符串作为参数可以确保精度不丢失。 ```python d = decimal.Decimal('3.14') print(d) # 输出: 3.14 ``` ##### 3. 从浮点数创建 浮点数到Decimal的转换可能引入精度误差。...

    PTA题目(L1)(Java).docx

    2. **L1-004 计算摄氏温度** 该题要求将华氏温度转换为摄氏温度,利用公式`C = 5 * (F - 32) / 9`。参赛者需要了解输入输出格式,并学会处理用户输入,以及使用数学运算符进行计算。在此过程中,会接触到`Scanner`...

    Python100实例.docx

    2. **控制结构**: - 实例005的三数排序和068的旋转数列,涉及到条件判断和循环结构。 - 实例029的反向输出和032的反向输出II,展示了列表的遍历和反转技巧。 3. **函数与模块**: - 实例034的调用函数和044的...

    python常用函数总结.pdf

    #### 2. input()函数 `input()`函数用于接收用户输入的信息,并将其作为一个字符串返回。 - 接收输入:通过`input()`函数接收用户输入的字符串,可以使用`print()`函数来输出接收到的字符串。 - 提示信息:`input...

    程序员-3期(PX014) 计算机与软件工程基础知识.doc

    2. **数据的表示** - **定点数**分为纯整数和纯小数,有原码、反码、补码三种表示方式(II级应用)。 - **浮点数**用于表示实数,理解其表示原理和精度、溢出概念(II级应用)。 - **非数值数据**如字符、汉字、...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-089-Java基本语法-控制语句-if语句程序举例2.avi 北京动力节点-Java编程零基础教程-090-Java基本语法-控制语句-switch语句-基本语法.avi 北京动力节点-Java编程零基础教程-091-...

    湖南大学信息科学与工程学院C语言上机部分题库150道题.pdf

    2. 题目ASCII33127中,程序演示了如何使用`while`循环遍历ASCII字符(范围从33到127),并打印这些字符。同时,程序使用了`getch()`函数来等待用户输入,以便继续执行或查看程序的输出结果。 3. 题目004中,程序...

    c语言试题(20210926043229).pdf

    2. **C语言关键字**: - 关键字是C语言预定义的保留词汇,用于特定的语法结构,例如`switch`, `typedef`, `continue`等,如选项B所示。 - `default`、`register`和`enum`是C语言的关键字,而`external`不是,如...

    220个C语言程序源代码集合.zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    第三讲-基本数据类型PPT课件.ppt

    2. **字符型**:char类型,通常占1个字节,用于存储单个字符,如字母、数字或其他字符。 3. **浮点类型**:如float、double,用于存储带有小数的数值。浮点数在内存中通常以IEEE 754标准的二进制浮点表示法存储。 ...

    200个C程序.rar

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...

    11年考研计算机强化精讲班组成原理014

    2. **指令系统**:介绍了计算机指令的基本结构,如操作码和地址码,以及不同类型的指令,如数据传送、算术逻辑运算、控制转移等,还有寻址方式如立即寻址、直接寻址、间接寻址等。 3. **中央处理器(CPU)设计**:...

    C语言源代码实例.rar

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    220个C语言程序源代码.zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

Global site tag (gtag.js) - Google Analytics