数值计算:设计算法的若干原则
(一)避免相近两数相减
当x充分大时:
对于小的正数ε:
sin(x+ε) – sinx=2cos(x+ε/2)sin(ε/2)
(注: sin(x) – sin(y)=2 cos [(x+y)/2] sin [(x-y)/2] )
(二)要防止大数“吃掉“小数,注意保护重要数据
在五位浮点十进制计算机上,计算
y=54321+0.4+0.3+0.4
如果按从左到右的顺序进行加法运算,后三个数都在对阶过程中被当作零,得出含有较大绝对误差的结果y=54321。要避免这种大数“吃掉”小数的现象,可以调整计算顺序,采用先小数后大数的计算次序,即先将0.4,0.3,0.4加起来,然后再加上54321,结果等于54322。
一般情况下,若干数相加,采用绝对值较小者先加的算法,结果的相对误差限较小。
(三)秦九韶算法
通常,计算多项式
Pn(x)=anxn+ an-1xn-1+…+ a1x+a0
的值,若直接计算再逐项相加,一共需做n(n+1)/2次乘法和n次加法。
若采用 Pn(x)=(…((anx+an-1)x+an-2)x+…+a1)x+a0 即“秦九韶算法”。
则只需n次乘法和n次加法就可以算出Pn(x)的值。“秦九韶算法”的优点是不仅运算量小,而且数值稳定。
实例代码如下:
#include "stdio.h"
main()
{static float a[]={2.1296,1.912,1.215,0.425,0.0625};float y;int i;float x=1.0;y=a[4];for (i=3;i>=0;i--)y=y*x+a[i];printf("x=%4.2f,y=%6.4f",x,y);}
(四)要避免绝对值小的数作除数
当x接近于0时 (1-cosx)/sinx的分子、分母都近0,为避免绝对值小的数作接除数,可将原式
化为 (1-cosx)/sinx=sinx/(1+cosx)
(五)设法控制误差的传播
数值计算:设计算法的若干原则相关推荐
- 【万字总结】以插排和分治为例来看如何分析与设计算法
插入排序及其解决思路 算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的. 就像编程语言中的"Hello World!"程 ...
- 百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性
摘要 尽管mRNA疫苗已用于COVID-19的预防,但仍然面临不稳定和易降解的风险,这是mRNA疫苗存储.配送.效价等面临的重要障碍.先前的研究已表明,增加二级结构可延长mRNA的半衰期,再加上选择优 ...
- 深入分析游戏设计的8条原则
原文链接:http://gamerboom.com/archives/78680 深入分析游戏设计的8条原则 发布时间:2013-11-11 16:33:03 Tags: 反馈, 奖励, 平衡, 流 ...
- 函数设计的两个原则(单一出口、一专多能)和实例
函数设计应该像模块设计一样,讲究接口和封装.函数的命名应该让使用函数的程序员见名知意,函数应该封装成简单易用的形式,而且当函数内部实现算法变化时,函数还能够保持接口的稳定性. 下面的例子来源于浙江大学 ...
- UI设计培训分享:app图标设计要遵循哪些原则
APP图片设计是UI设计工作中经常会遇到的,一个好的APP产品,图标的设计是非常重要的,本期小编为大家分享的UI设计培训教程就是app图标设计要遵循哪些原则?来看看下面的详细介绍. UI设计培训分享: ...
- UI设计学习的对比原则怎么运用?
本期小编为大家介绍的UI设计培训教程就是关于UI设计学习的对比原则怎么运用?因为在UI设计中分组原则这一项在文字排版中运用的几率是比较频繁的,并且分组对于层次感和整合信息都有一定的帮助,但是光有分组还 ...
- 经典算法面试题目-设计算法移除字符串中重复的字符(1.3)
题目 Design an algorithm and write code to remove the duplicate characters in a string without using a ...
- 软件设计中的一些原则
本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助. Don't Repeat Yourself (DRY) DR ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...
最新文章
- Ubuntu 13.10 安装软件失败后出现的问题——已安装 post-installation 脚本 返回了错误号 1...
- zookeeper图形工具——zkui
- yum update php5.5,(二)Centos7下Yum更新安装PHP5.5,5.6,7.0
- linux对文件的描述,对Linux文件系统的简单理解
- 低内阻的MOS管 4N04R7
- 【深度学习系列】迁移学习Transfer Learning
- HH SaaS电商系统的线上服务商品库存和采购设计
- 大数据从入门到就业的四个必备常识
- chain.doFilter(request,response)含义
- 洛达项目AB152xP资料SDK相关说明
- 计算机主板cpu插座分类,Intel历代CPU插槽类型、架构、常用主板大全
- 如何成为早起者(二)
- c# 弹出虚拟键盘关闭虚拟键盘(适用win10、win7)学习记录(转载)
- sql 数据库前两列值乘_SQL | SQL 必知必会笔记 (一 )
- 【C++】1018 锤子剪刀布 (20 分)
- 1008day1:列表-字符串基础知识、正则提取字符串小数、python数据类型、判断为假的方法、格式判断if elif elif else、字符串遍、计算器、提取str字母、斐波那契数列、水仙花数
- Oracle中ltrim的用法
- 惊天阴谋-陈晓如何窃取国美电器的
- 类似于快手、美拍、抖音短视频录制SDK接入教程
- 20221119 今天的世界发生了什么
热门文章
- 深入浅出MyBatis:「映射器」全了解
- 【VMCloud云平台】SCCM(八) OSD(一)- 部署准备
- 移动混合应用HTML5数据查询优化
- Linux系统上Crontab定时执行教程
- Oracle Parallel Execution(并行执行)
- Spring Boot整合Servlet,Filter,Listener,访问静态资源
- java 递归 遍历目录下的所有文件
- 【Fiddler 问题】解决关于Fiddler 抓包中,手机网络配置代理后,无法上网
- Python中68个内置函数的总结
- “The server requested authentication method unknown to the client.”的解决方案