float.h

一背景知识
浮点算术非常复杂   很多小的处理器在硬件指令方面甚至不支持浮点算术   其他的则需要一个独立的协处理器来处理这种运算   只有最复杂的计算机才在硬件指令集中支持浮点运算
一般应用程序不需要浮点算术   其他可以通过软件来实现浮点运算  需要性能的降低和几千字节的额外代码
上溢和下溢
一个结果可能太大 不能在一台机器上表示   结果上溢可能导致终端 可能会产生一个特殊的编码值   或者会产生一个很 容易被误导的有效值的垃圾值    
一个结果可能太小而不能在一台机器上表示   但是在另一台机器上却可以表示  结果可能会导致终端  可能会被精确的0 代替
有效值丢失
把两个精确的数相乘后可能得到一般的有效值  把两个大小相近的数相减  可能会丢失大部分或者全部的有效值
上溢和下溢和有效值丢失对浮点算术来说是固有的
变化
浮点值的运算加法 所得的结果在一定程度上依赖于那两台机器的舍入方式 在某些场合下 得到一个快速的答案比得到一个尽可能
精确的答案要好得多
浮点型的描述
c标准通常描述定义足够多的术语来讨论浮点型的参变量 但是并没有说明如何得到一个正确的结果
float.h头文件补充已经存在的头文件limits.h 我们把那些可能对严格的数值运算程序员有用的每个参数都加入到float.h中
 
二 c标准的内容
float.h
float.h和limits.h  两个头文件定义了几个可以展开为各种范围和参数的宏
浮点类型的特征float.h
在一个模型的基础上定义   描述了浮点数字和一些值的表示方法   提供了一个实现浮点算术的信息   
s 符号+-1
b 指数表示的基数  一个大于1的整数
e 指数 一个值在e(min)和e(max)之间的整数
p 精度(b进制数的有效位数)
f(k) 比b小的非负整数 有效数字
一个规格化的浮点数x   如果x!=0  则f(1)>0  
 
 
FLT_ROUNTDS     浮点加法的舍入模式
FLT_RADIX 指数表示的基数
FLT_MANT_DIG 进制的浮点数的有效位数 p
...
三 float.h的使用
复杂的数值程序会用到    浮点算数的3个缺陷是上溢 下溢和有效值的丢失  以下有几种使用这些宏的方式  可以更加安全地执行double型算术运算  当然也适用于float和long double类型
 
上溢
为了避免上溢  一定要保证所有的值都不会超过DBL_MAX的数值
执行测试的时候 错误已经发生了  如果存储在y中的值太大了而不能表示   y可能会包含一个特殊的代码   dbl_max或者一个无用的值   由提供浮点算术的种类所决定
可以通过一个测试
if(x<log(DBL_MAX))
y=exp(x);
else
... /*HANDLE OVERFLOW*/
也可以通过使用一个相关的宏来避免计算log(DBL_MAX)
if(x<=FLT_MAX_10_EXP)
y=pow(10,x);
else
... /*HANDLE OVERLFOW*/
如果FLT_RADIX不等于10   此测试有必要  通常值为2   或者更少的情况为16   
函数ldexp使得通过2的幂来换算一个浮点数变得很容易   在FLT_RADIX等于2的普遍情况下   会是一个效率很高的操作
对于一个整型指数n来说
if(n<FLT_MAX_EXP)
y=ldexp(1.0,n);
else
... /*HANDLE OVERFLOW*/
当为数学库编写附加的函数时   很可能使用最后一个测试
 
下溢
为了避免下溢   一定要保证所有的值都大于等于DBL_MIN的数值  几乎所有的浮点实现都用0来代替一个过小而不能表示的值   只有当除以一个会产生下溢的值时  才会遇到麻烦。
测试
if(log(DBL_MIN)<=x)
y=exp(x)
else
.../*HANDLE UNDERFLOW*/
if(FLT_MIN10_EXP<=x)
y=pow(10,x);
else
.../*HANDLE UNDERFLOW*/
if(FLT_MIN_EXP<n)
y=ldexp(1.0,n);
else 
..../*HANDLE UNDERFLOW*/
 
有效值的丢失
当两个几乎相等的值相减的时候  就会发生有效值丢失   但是可以组织有效值的丢失  --把一个很小的数和一个很大的 数相加    一个浮点数表示只能保持一个确定的精度   

float.h的更多相关文章

  1. C 标准库系列之float.h

    float.h 内部主要包含了一系列的浮点数宏.指明可移植程序必要的常量:浮点数格式一般为Spxbe;其中S表示+-:p表示底数.b表示基数如2.8.10.16等进制,e为指数标识E或e: 在一般情况 ...

  2. <limits.h>和<float.h>

    头文件<limits.h>中定义了用于表示整类型大小的常量.以下所列的值是可接受的最小值,实际系统中可能有更大的值. CHAR_BIT char类型的位数 CHAR_MAX UCHAR_M ...

  3. <math.h>与<float.h>

    (一) <math.h> <math.h>文件中已经定义了M_PI,如下所示,用户可以直接使用: //math.h........................ #if de ...

  4. Standard C 之 math.h和float.h

    对于C Standard Library 可以参考:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ 或者 http://www.cplusplus.c ...

  5. <cfloat> (float.h)

    头文件: <cfloat> (float.h) 浮点类型的特性 这个头文件为特殊系统和编译器的实现描述了浮点类型的特征. 一个浮点数包含四个元素: 一个标志(a sign):正或负; 一个 ...

  6. C 标准库 - <float.h>

    C 标准库 - <float.h> 简介 C 标准库的 float.h 头文件包含了一组与浮点值相关的依赖于平台的常量.这些常量是由 ANSI C 提出的,这让程序更具有可移植性.在讲解这 ...

  7. <float.h>中DBL_TRUE_MIN的定义和作用

    搬运自己2016年11月22日于SegmentFault发表的文章.链接:https://segmentfault.com/a/1190000007565915 在学习C Prime Plus的过程中 ...

  8. C 标准库系列之limits.h

    limits.h 类似于float.h,其定义了一些列类型的值的范围.限制值,也就是说该类型的值不可以大于该上界或者小于该类型值的下界: glibc中宏定义了一下的值: # define MB_LEN ...

  9. float 浮点数与零值0比较大小

    float x: 千万不要写x==0; 写出float x 与“零值”比较的if语句——一道面试题分析 写出float  x 与“零值”比较的if语句 请写出 float  x 与“零值”比较的 if ...

随机推荐

  1. MYSQL5.7.11安装问题

    今天下午在笔记本上安装MySQL软件.一开始下载的是最新版5.7.20-winx64.到了安装环节,各种报错,先是缺少什么DLL120,好吧,找到资源补丁下载,放到系统文件夹.以为OK了.再尝试,这次 ...

  2. REST访问(RestTemplate)

    https://www.cnblogs.com/softidea/p/6910198.html 经常需要发送一个GET/POST请求到其他系统(REST API),通过JDK自带的HttpURLCon ...

  3. Jquery EasyUI 中ValidateBox验证框使用讲解(转)

    Validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将会更改输入框的背景颜色,并且显示警告图标和提示信息.该验证框可以结合form(表单)插件并防止表 ...

  4. JavaScprit30-5 学习笔记

    最近忙这忙那...好久没看视频学习了...但是该学的还是要学. 这次要实现的效果是利用 flex 的 特性 来实现 可伸缩的图片墙演示 页面的展示...: 效果挺炫酷啊... 那么就来总结一下 学到了 ...

  5. Java类的静态块の二

    在上一篇Java类的静态块の一中介绍到:类的静态块在类加载时候执行,执行早于构造函数,并且只执行一次. 但是在下面的例子中却发现JVM并不是把把所有的static模块都执行完成再执行其他(Java果然 ...

  6. github上ReadMe语法

    大标题 =================================== 大标题一般显示工程名,类似html的\<h1\><br /> 你只要在标题下面跟上=====即可 ...

  7. 洛谷 P2292 [HNOI2004]L语言

    题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...

  8. codevs 1008 选数

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n ...

  9. Maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clea

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) ...

  10. JavaScript中数据类型和typeof返回的数据类型

    除了上图,要注意三点:1.symbol是ES6中新增的数据类型 2.typeof(null)结果是Object 3.typeof(Object)和typeof(Array)的结果是function,因 ...