- 浏览: 543402 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (231)
- 一个操作系统的实现 (20)
- 汇编(NASM) (12)
- Linux编程 (11)
- 项目管理 (4)
- 计算机网络 (8)
- 设计模式(抽象&封装) (17)
- 数据结构和算法 (32)
- java基础 (6)
- UML细节 (2)
- C/C++ (31)
- Windows (2)
- 乱七八糟 (13)
- MyLaB (6)
- 系统程序员-成长计划 (8)
- POJ部分题目 (10)
- 数学 (6)
- 分布式 & 云计算 (2)
- python (13)
- 面试 (1)
- 链接、装载与库 (11)
- java并行编程 (3)
- 数据库 (0)
- 体系结构 (3)
- C++ template / STL (4)
- Linux环境和脚本 (6)
最新评论
-
chuanwang66:
默默水塘 写道typedef void(*Fun)(void) ...
C++虚函数表(转) -
默默水塘:
typedef void(*Fun)(void);
C++虚函数表(转) -
lishaoqingmn:
写的很好,例子简单明了,将观察者模式都表达了出来。
这里是ja ...
观察者模式——Observer
本文是Sam我总结的,在C++学习过程中常见的一些涉及计算精度的问题,可谓明察秋毫之作!
1. 计算过程使用高精度类型(如,double),转型(如,最终结果转换为int)放在最后一步完成
举例:(最少乘法次数,C++)
/* 题目描述: 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。 如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次。 211:2*2=22(第一次乘),22*22=24(第二次乘)24*24=28(第三次乘)28*22=210(第四次乘)210*21=211(第五次乘)所以最少共5次。 输入 第一行m表示有m(1<=m<=100)组测试数据; 每一组测试数据有一整数n(0<n<=10000); 输出 输出每组测试数据所需次数s; 样例输入 3 2 3 4 样例输出 1 2 2 ----------------------------------------------------------------- 解题方法: 每次寻找小于等于n的最大的2k的值,如11,先找23=8,然后以此类推。 则可以转换为二进制计算。 其算法类似于把一个十进制数转换为二进制。只要把最高位1转换的次数记下来,再加上这个二进制其它为1的位的个数。例如: (14)10=(1110)2 最高位的1需要转换3次,所以计算14次方需要3+2(其它为1的位数)=5次。 (100)10=(1100100)2 最高位的1需要转换6次,所以计算100次方需要6+2(其它为1的位数)=8次。 此算法关键在于最高位1转换的次数。(2倍增长是速度最快!)只要算出最高位的1,则低位的1已经被全部算出。因为最高位的1是通过1+1=2 2+2=4 4+4=8 8+8=16……算出来的,则最高位转换次数算出后,其他为1的位只是在使用的时候加一次。(二分思想) */ #include <iostream> #include <cmath> using namespace std; int countOne(int n){ int cnt=0; while(n>0){ n-=(n&(-n)); cnt++; } return cnt; } int main(){ int cases; cin>>cases; while(cases--){ int n; cin>>n; //提高计算精度: // 计算全过程使用double,只最终进行一次int转型. // 尽量不要将中间结果转换成int cout<< log((double)n)/log(2.0) + countOne(n)-1 <<endl; //当n=8时,输出3(正确) //cout<< (int)( log((double)n)/log(2.0)) + countOne(n)-1<<endl; //当n=8时,输出2(错误) } system("pause"); return 0; }
2.无穷迭代,判断是否收敛:引入最小误差项eps
举例:(泰勒级数计算正弦值,C++)
/* 利用泰勒(Taylor)級數展開式,三角正弦函數sin(x)=x – ((x^3)/3!) + ((x^5)/5!) – ((x^7)/7!) + ((x^9)/9!) - …… 設計一程式,輸入角度0-360度(必須轉換為弳度),計算其sin值。 */ #include <iostream> using namespace std; const double eps=1e-15; //最小误差项 const double pi=3.14159265358979323846; int main(){ double angle; //角度 double x; //(对应)弧度 double ans1, ans2; //ans1: 本次结果, ans2:上次结果 double numerator; //分子 double denominator; //分母 cout<<"Please input the angle: "; cin>>angle; x=angle/180*pi; //写代码时,先写下面do...while()循环,再来写这三个初始化值,不易出错 ans1=x; numerator=x; denominator=1.0; int i=2; do{ ans2=ans1; numerator*=-x*x; denominator*=( i*(i+1) ); ans1=ans2+ numerator/denominator; i+=2; }while(ans1-ans2>eps || ans2-ans1>eps); //cout<<"res="<<ans1<<endl; printf("sin(%.2lf) = %.6lf\n",angle, ans1); system("pause"); return 0; }
3.double类型指定精度输出
举例:(见上例,C++)
double angle=... double ans1=... //小数点后w位的double类型输出: printf("%.wlf",d); printf("sin(%.2lf) = %.6lf\n",angle, ans1);
发表评论
-
C++引用计数
2013-12-29 14:48 1165主要参考《提高C++性能的编程技术》第12章 引用计数 ... -
string.h(二)C的字符串分隔函数strtok()
2013-12-19 13:25 1508char *strtok(char *str1, c ... -
关于size_t 和 ptrdiff_t 【转】
2013-12-12 18:57 859Abstract Introduction size ... -
new, operator new 和 placement new
2013-12-12 17:08 1077一、new 和 delete 的过程: 在进行一切讲解之 ... -
C/C++柔性数组 char[0]
2013-11-08 15:57 1009在标准C和C++中0长数组 ... -
填充与对齐——指定变量的地址偏移【转】
2013-11-08 14:53 858转自 http://hi.baidu.com/bai_ye ... -
数组和指针并不同(总结《C专家编程chap4》)
2013-10-06 14:55 940左值(地址)和右值(地址的内容): 1. 使用数组 ... -
细说C++全局变量、局部变量和静态局部变量【转】
2013-08-15 17:17 862转自http://see.xidian.ed ... -
strcpy和strncpy用法和区别(转)
2013-07-31 17:37 31strcpy和strncpy用法和区别 转自:http ... -
stl iterator&const_iterator
2013-07-11 09:38 14iterator和const_iterator访问conta ... -
C++类对象创建过程揭密(转载)
2013-05-24 16:56 927转载:http://blog.csdn.net ... -
C调用汇编
2013-03-27 20:28 1459一、汇编语言的两种语法格式 Intel格式: 大 ... -
C++四个类型转换关键字const_cast, static_cast, dynamic_cast, reinterpret_cast
2013-02-27 10:13 2535C风格的强制类型转换( ... -
C/C++中内存模型
2012-12-30 11:07 1634一直以来,C++ ... -
map使用
2012-12-29 15:21 35需要#include <map> 定义map& ... -
C++调用C
2012-11-29 22:42 1279一般地,C++调用C有两种形式(网上资料一般没讲全): ... -
C++随机数
2012-11-07 19:41 913C++随机数 #include<iostream ... -
C文件操作(一)
2012-11-07 19:11 1611C文件操作(流式文件 &a ... -
C++中的内联函数inline
2012-07-13 19:16 1073在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者 ... -
模板和泛型编程???从P269继续
2012-04-22 09:58 842参考书 <C++ By Dissection> ...
相关推荐
本文主要探讨的是“计算机精度问题”,特别是关于双精度浮点数(Double)的表示和计算中可能出现的问题。 双精度浮点数(Double)在计算机中通常按照IEEE 754标准进行存储和运算,它提供了大约15到16位的有效数字,...
iOS 之关于 double/float 数据计算精度问题详解 iOS 开发中,double 和 float 数据类型的计算精度问题是一个常见的问题。本篇文章将详细介绍 iOS 中 double/float 数据计算精度问题的根源、解决方案和高精度计算...
从给定的文件信息来看,文档标题为《Matlab_Sinulink仿真性能与计算精度设置方法的研究.pdf》,该文档是一篇关于Matlab和Simulink仿真技术的专业论文,主要探讨如何通过不同的设置方法来提高仿真性能和计算精度。...
标题"PDE.rar_一阶计算精度_欧拉时间步"所指的内容是关于偏微分方程(Partial Differential Equation, 简称PDE)数值解的教程,具体使用了一阶精度的时间步进方法——欧拉方法(Euler Method)。在计算机科学和工程...
2. **computational mathematics.txt**:这可能是一个关于计算数学的文档,详细介绍了HugeCalc所采用的算法和理论基础,如大数算法、高精度浮点运算方法等。 3. **WhatsNew.txt**:这份文件很可能列出了HugeCalc的...
这是一份关于π的任意精度计算的C++实现源代码.算法是基于二次收敛算法,即AGM(几何平均数)方法,该算法也可应用于计算椭圆积分和以先进的ADI算法实现椭圆偏微分方程. (速度可能优于Mathematica!!!)
Draxler和Zessin [1]推导了一类假设为Rasch模型的心理测验模型的条件测试的功效函数,并建议了由Verhelst [2]开发的MCMC方法,用于对功效的数值近似。... 关于计算时间的问题,必须考虑将Verhelst方法更有效。
4. **使用高精度库**:如果`decimal`的精度仍不足以满足需求,可以考虑使用第三方库,如`System.Numerics.BigInteger`或者专门的高精度计算库。 5. **控制计算顺序和舍入策略**:通过调整计算顺序或应用特定的舍入...
根据给定文件的信息,我们可以总结出以下关于高精度计算(包括加法、减法、乘法和除法)的相关知识点: ### 1. 高精度计算简介 在计算机科学领域,传统的整数类型如 `int` 或 `long long` 等只能表示一定范围内的...
RTKLIB 关于高精度 GPS 动态定位函数与处理过程整理资源提供了详细的函数调用流程图和处理过程,涵盖了文件读取、计算基站位置、卫星位置、双差、卡尔曼滤波和模糊度估计等知识点,为相关开发者和研究人员提供了有...
这是一份关于π的任意精度计算的C++实现源代码.算法是基于二次收敛算法,即AGM(几何平均数)方法,该算法也可应用于计算椭圆积分和以先进的ADI算法实现椭圆偏微分方程. (运行速度可能快于Mathematica哦)
精密GPS动态测量采用载波相位差分技术,其标准测量模式...本文主要介绍用RTKLIB 实现精密动态定位的过程,该过程包括观测文件和导航文件的读取、基准站位置的计算、流动站位置的求解、运行结果的输出,下面将分块讨论。
【深度相机原理与精度分析】 深度相机是一种能够捕捉三维空间信息的设备,广泛应用于机器人导航、虚拟现实、增强现实、3D扫描等领域。常见的深度相机技术主要包括基于主动投射结构光、双目视觉和光飞行时间法(ToF...
"关于浮点数的精度问题" 浮点数精度问题是一个经典的问题,对于了解和学习C语言有一定帮助。浮点数的精度问题是由于计算机对浮点数的存储方式和表示方法所致。 IEEE754 的浮点数存储格式对浮点数的表示方法进行了...
### 高精度计算知识点 #### 1. 高精度计算背景及意义 高精度计算是在计算机科学领域中解决...以上就是关于高精度计算的一些基本概念和技术要点,通过这些方法,可以有效地解决传统数据类型无法解决的大数运算问题。
标题所提到的知识点是关于在JavaScript编程语言中,如何处理和避免在进行数字计算时出现的精度误差问题。这个问题是数字在以浮点数形式存储时,因为计算机的存储架构是以二进制为基础的,导致一些十进制小数在二进制...
这些文件通常包含关于卫星的轨道参数,如位置、速度、健康状态等,以帮助接收机计算其相对于卫星的位置。在MATLAB中,我们需要编写脚本来读取这些'n'文件,将其中的二进制数据转换为可操作的轨道元素。 接下来,...
java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题
利用广播星历进行计算GLONASS卫星位置,精度达到0.5m。利用matlab编写的,有详细说明。