一组数据 整数 误差12.345% 不能excel 浮点误差运算 怎么计算

君,已阅读到文档的结尾了呢~~
3.1 数值的表示方法和转换 3.2 带符号的二进制数据在计算机中的表示方 法及加减法运算 3.3 二进制乘法运算 3.4 二进制除法运算 3.5 浮点的运算方法 3.6 运算部件 3.7 数据校验码。3.1 数据的表示方法和转换 3.1.1 数值型数据的表示和转换。: 3×104+2×103+7×102+8×101+6×100。2进制数。8进制数。数制-”数”的构成方法。3×102+2×101+7×100+8×10-1+6×10-2 327.86:。2进制..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
第3章 运算方法和部件_修改过
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口基本数据及其运算_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
基本数据及其运算
上传于||文档简介
&&基​本​数​据​及​其​运​算
大小:226.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢浅谈浮点数运算的误差 - 银河 - 博客园
我们知道,浮点数运算存在舍入误差。在某些特殊的情况下,舍入误差还可以累计到非常大的地步。让我们来看一下测试程序吧:
3 static class DecimalSumTester
static void Main(string[] args)
var n = (args.Length & 0) ? int.Parse(args[0]) : 10;
for (var i = 0; i & 3; i++) Console.WriteLine(F(n, i));
catch (Exception ex) { Console.WriteLine(ex.Message); }
static decimal F(int n, int k)
var z = 0.1m + k * 0000m;
var w = decimal.Round(z) / 2;
while (n-- & 0) z += z / 2 -
return z - w * 2;
在这个程序中:
第 19 行通过 while 循环不断进行累加: z += z / 2 - 。w&是不变的,而 z 是通过不断累加而增大的。
第 9 行读取命令行参数作为 n 的值来决定 while 循环次数。
第 15 至 21 行的 F 方法第一个参数 n 就是循环次数。第二个参数 k 决定累加初值的整数部分的大小。
在这个程序中参数 k 仅取 0、1 和 2 三种情况。如果算术运算没有误差的话,这三种情况下 F 方法的返回值应该一样。
在 Linux 中编译和运行
在 Arch Linux 64-bit 操作系统的 Mono 3.0.4 环境下编译和运行:
work$ dmcs DecimalSumTester.cs
work$ mono DecimalSumTester.exe 24
上述结果中第一行是计算出来的准确值。第二行和第三行的值理论上应该等于第一行。但是由于浮点数运算的舍入误差累计的结果,最终答案的误差相当大。在我的上一篇随笔&&中提到,decimal 的算术运算在 Linux 环境下的舍入规则是四舍五入,这可能导致误差累计得比较大。而在 Windows 环境下的舍入规则是四舍六入五向偶。那么我们就接着往下看吧。
在 Windows 中编译和运行
在 Windows 7 SP1 32-bit 操作系统的 Microsoft .NET Framework 4.5 环境下编译和运行:
D:\work& csc DecimalSumTester.cs
Microsoft(R) Visual C# 编译器版本 4.0.
用于 Microsoft(R) .NET Framework 4.5
版权所有 (C) Microsoft Corporation。保留所有权利。
D:\work& DecimalSumTester 24
这个运行结果和在 Linux 环境下大不相同。但是误差也是相当的大。
让我们来看看在运算过程中发生了什么吧。在上述测试程序中插入一些调试语句:
3 static class DecimalSumDebug
static void Main(string[] args)
var n = (args.Length & 0) ? int.Parse(args[0]) : 10;
for (var i = 0; i & 3; i++)
Console.WriteLine(F(n, i).ToString().PadRight(77, '-'));
static decimal F(int n, int k)
var z = 0.1m + k * 0000m;
var w = decimal.Round(z) / 2;
for (decimal x, n-- & 0; z += x)
x = (y = z / 2) -
Console.WriteLine("{0,-30}: {1,-30}: {2}", z, y, x);
return z - w * 2;
这个程序和前面的测试程序的功能是相同,仅仅是运算过程中增加输出中间变量的值的语句。
在 Linux 中调试
在 Arch Linux 的 Mono 环境下编译和运行,输出一大堆调试信息:
work$ dmcs DecimalSumDebug.cs
work$ mono DecimalSumDebug.exe 10
: 0.253125
: 0.253125
: 0.3796875
: 0.3796875
5.----------------------------------------------------------------
0.05: 0.05
0.15: 0.15
0.25: 0.25
1.35: 1.35
2.05: 2.05
9.3--------------------------------------------------------------------------
9.3--------------------------------------------------------------------------
上述结果中第一组是准确值,没有发生舍入误差。后两组的舍入情况不同,但最终结果居然一样。至于为什么进行这样的舍入,请参阅我的上一篇随笔。
在 Windows 中调试
在 Windows 的 .NET Framework 中编译和运行,也输出一大堆调试信息:
D:\work& DecimalSumDebug 10
: 0.253125
: 0.253125
: 0.3796875
: 0.3796875
5.----------------------------------------------------------------
0.05: 0.05
0.15: 0.15
0.45: 0.45
1.05: 1.05
7.2--------------------------------------------------------------------------
0.1--------------------------------------------------------------------------
同样,第一组的结果是准确值,后两组有着不同的舍入误差。第二组的舍入误差比 Linux 中的要好。第三组就很糟糕了,被累加的值直接被舍入到 0 了。
System.Double 数据类型的情况
把前面的测试程序稍加修改,就可用于测试 double 数据类型的舍入误差:
3 static class DoubleSumTester
static void Main(string[] args)
var e = (args.Length & 0) ? int.Parse(args[0]) : 15;
for (var i = 0; i & 3; i++) Console.WriteLine(F(10, i, e));
catch (Exception ex) { Console.WriteLine(ex.Message); }
static double F(int n, int k, int e)
var z = 0.1 + k * Math.Pow(10, e);
var w = (long)z / 2.0;
while (n-- & 0) z += z / 2 -
return z - w * 2;
这时把循环次数固定为 10,命令行参数指定影响舍入误差的整数部分的 10 的幂指数。运行结果如下所示:
work$ dmcs DoubleSumTester.cs
work$ mono DoubleSumTester.exe 0
work$ mono DoubleSumTester.exe 1
work$ mono DoubleSumTester.exe 4
work$ mono DoubleSumTester.exe 10
work$ mono DoubleSumTester.exe 12
work$ mono DoubleSumTester.exe 14
work$ mono DoubleSumTester.exe 15
work$ mono DoubleSumTester.exe 16
这次,Linux 和 Windows 中的运行结果是相同的。同样,每次运行的第一行是准确值,其余两行是不同的舍入误差形成的结果。【图文】C语言 第3章_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言 第3章
上传于||暂无简介
大小:537.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢浮点数的表示和基本运算_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
浮点数的表示和基本运算
上传于||文档简介
&&浮​点​数​的​表​示​约​定​
​
​浮​点​数​的​乘​除​法
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢

我要回帖

更多关于 浮点运算误差 的文章

 

随机推荐