知识大全 浮点运算结果出现误差原因分析及解决方案

Posted 小数

篇首语:没关系,天空越黑,星星越亮。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浮点运算结果出现误差原因分析及解决方案相关的知识,希望对你有一定的参考价值。

  如下C#代码

  float a = f;

  float b = f;

  float c = a b;

  此时c为多少?

   ?错误!

  此时c为 !

  为什么?

  其根本原因是计算机所使用二进制 代码无法准确表示某些带小数位的十进制数据

  下面我们来分析下

  我们知道将一个十进制数值转换为二进制数值 需要通过下面的计算方法

   整数部分 连续用该整数除以 取余数 然后商再除以 直到商等于 为止 然后把得到的各个余数按相反的顺序排列 简称 除 取余法

   小数部分 十进制小数转换为二进制小数 采用 乘 取整 顺序排列 法 用 乘以十进制小数 将得到的整数部分取出 再用 乘余下的小数部分 然后再将积的整数部分取出 如此进行 直到积中的小数部分为 或者达到所要求的精度为止 然后把取出的整数部分按顺序排列起来 即先取出的整数部分作为二进制小数的高位 后取出的整数部分作为低位有效位 简称 乘 取整法

   含有小数的十进制数转换成二进制 整数 小数部分分别进行转换 然后相加

  例如 将十进制数值 转换为二进制数值 步骤如下

   (整数部分)

   / =

   / =

   / =

   / =

   / =

  ( ) =( )

   (小数部分)

   * =

   * =

  ( ) =( )

  ( ) =( ) +( ) =( )

  按照上述方法 我们将 及 转换为二进制代码

  ( ) = ( )

  ( ) = ( )

  后面的省略号表示已经算不完了 后面在无限重复 这段二进制数值

  文章开始部分 我们用的float类型 下面我们来看看float类型是否能存储上面转换出的二进制代码

  目前计算机上存储浮点数值是按照IEEE(电气和电子工程师协会) 浮点存储格式标准来存储的

  IEEE单精度浮点格式共 位 包含三个构成字段 位小数f 位偏置指数e 位符号s 将这些字段连续存放在一个 位字里 并对其进行编码 其中 : 位包含 位的小数f : 位包含 位指数e 第 位包含符号s 如下图所示

  

  也就是说上面将 及 转换出的二进制代码 我们只能存储 位 即使数据类型为double 也只能存储 位 这样大家便能看出问题出现的原因了

  截取的二进制代码已无法正确表示 及 根据这个二进制代码肯定无法正确得到结果

  如何解决这个问题?知道其根本原因后 我们知道是无法从根本上解决这个问题的 但我们可以有一些曲线救国的方法 下面列举几个

   因为二进制数值可以准确表示整数(可以使用整数转换为二进制方法验证下) 所以可以将小数乘以 或 等变成整数 然后做运算 最后再通过除以 或 等获得结果

   通过截取结果的有效小数位数等 来取得最好的近似结果 然后在做处理

   对于可以用有限长度的二进制数值表示的十进制数值 可以使用存储位数大于其长度的数据类型

  解决方案正在补充中…… 若各位有什么好的方法也可以提出来!

cha138/Article/program/net/201311/12845

相关参考

试分析引起电压互感器误差的内部原因及外部原因?

  内部原因:  (1)电压互感器在工作中有激磁损耗,即铁损,它影响激磁电流的大小,当激磁电流增大时,误差也相应增大。  (2)原、副绕组的内阻抗压降是电压互感器产生误差的另一个原因,它是因电压互感器

试分析引起电压互感器误差的内部原因及外部原因?

  内部原因:  (1)电压互感器在工作中有激磁损耗,即铁损,它影响激磁电流的大小,当激磁电流增大时,误差也相应增大。  (2)原、副绕组的内阻抗压降是电压互感器产生误差的另一个原因,它是因电压互感器

玉米出现红苗的原因及解决办法

在玉米生产中常发现有些地块玉米幼苗不长,叶片发红的现象。  玉米生长到4~5片叶后,生长缓慢,瘦弱,叶色紫红,初生根的侧生根系也较正常株少,次生根较正常株少或无。  出现红苗的原因  1早春地温低,易

玉米出现红苗的原因及解决办法

在玉米生产中常发现有些地块玉米幼苗不长,叶片发红的现象。  玉米生长到4~5片叶后,生长缓慢,瘦弱,叶色紫红,初生根的侧生根系也较正常株少,次生根较正常株少或无。  出现红苗的原因  1早春地温低,易

论叙测量误差的来源。

论叙测量误差的来源。参考答案:由于测量不可避免地受到各种因素的影响,所以测量结果只可能是被测量值的近似值(或称作估计值),它与真值之间的一个差值,这就是测量误差。研究测量误差,分析和掌握影响测量误差的

论叙测量误差的来源。

论叙测量误差的来源。参考答案:由于测量不可避免地受到各种因素的影响,所以测量结果只可能是被测量值的近似值(或称作估计值),它与真值之间的一个差值,这就是测量误差。研究测量误差,分析和掌握影响测量误差的

凝固型酸乳出现乳清析出的原因及解决方法?

  凝固型酸乳出现乳清析出的原因:  ①原料乳热处理不当热处理温度偏低或时间不够,就不能使大量乳清蛋白变性,而变性乳清蛋白可与酪蛋白形成复合物,能容纳更多的水分,并且具有最小的脱水收缩作用。  ②发酵

凝固型酸乳出现乳清析出的原因及解决方法?

  凝固型酸乳出现乳清析出的原因:  ①原料乳热处理不当热处理温度偏低或时间不够,就不能使大量乳清蛋白变性,而变性乳清蛋白可与酪蛋白形成复合物,能容纳更多的水分,并且具有最小的脱水收缩作用。  ②发酵

什么是系统误差?说明系统误差的主要特点。

什么是系统误差?说明系统误差的主要特点。参考答案:系统误差是在重复性条件下,对同一被测量进行无限多次测量所得结果的平均值与被测量的真值之差。如真值一样,系统误差及其原因不能完全获知。对测量仪器而言,测

什么是系统误差?说明系统误差的主要特点。

什么是系统误差?说明系统误差的主要特点。参考答案:系统误差是在重复性条件下,对同一被测量进行无限多次测量所得结果的平均值与被测量的真值之差。如真值一样,系统误差及其原因不能完全获知。对测量仪器而言,测