版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7203254.html 作者:窗户 QQ:6679072 E-mail:6679072@qq.com 曾经做一个硬件成本极度控制的项目,因为硬件成本极低,并且还需要实现较高的精度测量,过程中也自己用C语言实现了正弦.余弦.反正切.平方根等函数. 以下,无论是在我的实际项目中还是本地的计算机系统,int都是4个字节且机器为小端,除非特别提…
曾经做一个硬件成本极度控制的项目,因为硬件成本极低,并且还需要实现较高的精度测量,过程中也自己用C语言实现了正弦.余弦.反正切.平方根等函数. 以下,无论是在我的实际项目中还是本地的计算机系统,int都是4个字节且机器为小端,除非特别提及,否则都如此默认.按理float的存储没有大小端之分,可是的确在powerpc大端上浮点数的存储也一样是和X86/ARM这样的小端机相反.不过因为正好因大小端而决定浮点数的存储顺序,那么本系列贴子里所有的C语言程序至少在powerpc大端上也是效果相同的. 尽管…
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7223254.html 作者:窗户 QQ:6679072 E-mail:6679072@qq.com 了解了浮点数的存储以及手算平方根的原理,我们可以考虑程序实现了. 先实现一个64位整数的平方根,根据之前的手算平方根,程序也不是那么难写了. #include <stdint.h> uint64_t _sqrt_u64(uint64_…
C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. C语言中的四种存储类别:auto(自动的).static(静态的).register(寄存器的).extern(外部的) 1.auto(自动的)例:auto int a:定义的整形变量a的存储方式是自动存储的,也就是说动态的分配存储空间和释放存储空间.比如说,在一个调用函数里定义的变量,当我们调用这个函数时,CPU在动态存储区分配…
C语言中结构体内存存储方式 结构体的默认存储方式采用以最大字节元素字节数对其方式进行对齐,例如一个结构体中定义有char.int类型元素,则结构体存储空间按照int类型占用字节,如果还有double类型元素,则结构体存储空间按double类型占用字节对其.针对该特性特意编写如下测试代码: ​ /* run this program using the console pauser or add your own getch, system("pause") or input loop…
一.浮点数常量(小数) 0.11L, 0.0f ,0.0,1.88,2.5f ,0.188E1 E3表示103        比如 1.88E 3=1.88*1000=1880.0f E-3表示10-3      比如 1.88E-3=1.88/1000=0.00188f 二.浮点数变量 关键字 字节数 数值范围 float 4 +3.4E38(精确到6位小数)       %f ,%e 来格式化 double 8 +1.7E308(精确到15位小数)     %f ,%e 来格式化 long…
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7220506.html 作者:窗户 QQ:6679072 E-mail:6679072@qq.com 一个函数从数学上来说可以有无数个函数列收敛于这个函数,那么程序逼近实现来说可以有无数种算法,平方根自然也不例外. 不知道有多少人还记得手算平方根,那是满足每次在结果上添加一位,也就是按位逼近运算结果的唯一算法.至于数学上如何证明这个唯一…
测浮点数的位数牵扯到一个精度的问题,用普通的测整形数值的方法不能实现,于是我自己写了一个测浮点数的函数. #include <stdio.h> //for printf int length(double num) { int len=0; while(num>0.001)//这里非常重要:控制精确到小数点后第几位(取值影响计数结果) { num=num/10; printf("%d : %f\n",len,num); len++; } return len; } i…
#牛顿迭代法 def sqrt1(x): y = 1.0 while abs(y * y - x) > 1e-6: y = (y + x/y)/2 return y #使用二分法 def sqrt2(x): if x > 1: a = 1.0 b = x else: a = x b = 1.0 y = (a + x)/2 while abs(y * y - x) > 1e-6: if y * y > x: b = y y = (y + a) /2 else: a = y y = (…
以下面C程序为例: #include <stdio.h> ; ; ; int c; int main(void) { ; char b[] = "Hello World"; register ; printf("Hello World%d\n", c); ; } 我们在全局作用域和main函数的局部作用域各定义了一些变量,并且引入一些新的关键字const, static, register来修饰变量,那么这些变量的存储空间是怎么分配的呢?我们编译之后用r…
本文讨论C语言中的存储类别,包括数据在内存的存储.变量的存储类别.函数的存储类别.生存周期.下图为计算机的存储空间,有寄存器和内存. 一.存储区域 1.寄存器:存放立即参加运算的数据. 2.系统区:存放系统软件. 3.用户程序代码区:存放用户程序的程序代码. 4.库程序代码区:存放库函数的代码. 5.数据区,分为堆区.栈区和静态存储区. (1)堆区:存放动态变量,即由malloc申请的动态变量. (2)栈区:存放自动存储类型的变量,包括函数和复合语句中的局部变量等. (3)静态存储区:存放具有显…
1.动态局部变量:也称局部变量.自动变量,是指在函数内部定义的自动变量,不带static修饰,作用域是定义该变量的子程序.在退出函数后,变量自带内存会自动释放. 2.静态局部变量:是指在函数内部定义的静态变量,带static修饰,作用域是定义该变量的子程序.只被定义和初始化一次,这种变量在函数退出后不会释放内存,且保持其值,下次调用时不再重新创造和初始化该变量,而是直接用上一次留下的值为基础来进行操作.直到程序退出时一起释放(生存期为整个源文件). 3.动态全局变量:也称全局变量,是指在所有函数…
. C语言变量主要分为全局变量.静态全局变量.局部变量.静态局部变量和寄存器变量.其中静态变量用static关键字进行修饰.程序所占用的内存可以分为以下几个部分: ()代码段-存放程序代码,只读的,不能修改. ()全局区(静态区),又称为数据段.其中.data段存放的是已经初始化的全局变量和静态变量(静态全局变量和静态局部变量)..bss段存放的是未初始化的全局变量和静态变量(静态全局变量和静态局部变量).bss段会将未初始化的变量填充为0. () 堆: 是一种线性结构,类似链表实现,也可由其它…
以float a=1.0f为例: (int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1: (int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换),即读a的内存时按照整数来读取,而不考虑a本来的类型.为1065353216(3f800000的十进制表示): (int)&a是将a的地址(16进制数)转换为十进制,没有什么实际意义. 问题分析: (1)float类型中,所存储的指数位=实际的指数+127,尾数部分为底数的小数部分(底数整数部分应为1,省略不写).…
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期.这些说明符放置在它们所修饰的类型之前.下面列出 C++ 程序中可用的存储类: auto register static extern mutable thread_local (C++) 从 C++ 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用. auto 存储类 自 C++ 以来,auto 关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型.声明函数时函数返回值的占位符.…
C语言的本质(4)--浮点数的本质与运算 C语言规定了3种浮点数,float型.double型和long double型,其中float型占4个字节,double型占8个字节,longdouble型长度要大于等于double型,本文档将以float型为例进行介绍,double型和long double型只是比float型位数长,原理都是一样的. float型可以表示的范围是-3.402823466e38~3.402823466e38,而作为同为4个字节的定点数却只能表示-2147483648~2…
//加法函数 function accAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } m = Math.pow(10, Math.max(r1, r2)); r…
1 概论 程序(指令和数据的集合)在运行时,首先会被加载到内存(此时称为进程),然后由CPU通过控制器的译码从内存中读取指令,并按照指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按照地址把结果送到内存中去.这就是计算机工作最基本的原理了. 但是作为准备成为一名优秀的C语言程序员,必须更加深入的了解数据在计算机内存存储和CPU计算的内幕. 2 进制 2.1 进制的介绍 在最底层,计算机数据都是采用二进制的补码来进行存储和运算的,但是为了方便使用,日常生活中使用更多的进制类型是…
在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种.对用惯了汇编的人来说,总觉得高级语言’可控性’不好,不如汇编那样随心所欲.但是只要我们掌握了一定的C语言知识,有些东西还是容易做出来的,以下是笔者实际工作中遇到的几个问题,希望对初学C51者有所帮助. 一.C51热启动代码的编制 对于工业控制计算机,往往设有有看门狗电路,当看门狗动作,使计算机复位,这就是热启动.热启动时,一般不允许从头开始,这将导致现有的已测量到或计算到的值复位,导致系统工作异常.因而在程序必须判断是热启动还是…
大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 那这是js的错误吗? 当然不是,你的电脑做着正确的二进制浮点运算,但问题是你输入的是十进制的数,电脑以二进制运算,这两者并不是总是转化那么好的,有时候会得到正确的结果,但有时候就不那么幸运了 alert(0.7+0.1);//输出0.7999999999999999 alert(0.6+0.2);//输出0…
本文转载自:阮一峰的博客,http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html 张玉彬的博客 http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html 1.前几天,我在读一本C语言教材,有一道例题: #include <stdio.h> void main(void){ int num=9; /* num是整型变量,设为9…
编译最近的协同过滤算法皮尔逊相似度计算.下顺便研究R简单使用的语言.概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 由于这里每一个数都是等概率的.所以就当做是数组或向量中全部元素的平均数吧.能够使用R语言中函数mean(). 2)方差(Variance) 方差分为population variance整体方差和sample variance样本方差,差别是整体方差除以N,样本方差除以N-1. 数理统计中经常使用样本方差,R语言的var()函数计算的也是样本…
整理了一下最近对协同过滤推荐算法中的皮尔森相似度计算,顺带学习了下R语言的简单使用,也复习了概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 因为这里每个数都是等概率的,所以就当做是数组或向量中所有元素的平均数吧.可以使用R语言中函数mean(). 2)方差(Variance) 方差分为population variance总体方差和sample variance样本方差,区别是总体方差除以N,样本方差除以N-1. 数理统计中常用样本方差,R语言的var()…
大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 那这是js的错误吗? 当然不是,你的电脑做着正确的二进制浮点运算,但问题是你输入的是十进制的数,电脑以二进制运算,这两者并不是总是转化那么好的,有时候会得到正确的结果,但有时候就不那么幸运了 alert(0.7+0.1);//输出0.7999999999999999 alert(0.6+0.2);//输出0…
转自:http://talentluke.iteye.com/blog/1767138 大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 那这是js的错误吗? 当然不是,你的电脑做着正确的二进制浮点运算,但问题是你输入的是十进制的数,电脑以二进制运算,这两者并不是总是转化那么好的,有时候会得到正确的结果,但有时候就不那么幸运了 alert(0.7+0.1)…
众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0.09999999999999998,很多人知道这是浮点数误差问题,但具体就说不清楚了.本文帮你理清这背后的原理以及解决方案,还会向你解释JS中的大数危机和四则运算中会遇到的坑. 浮点数的存储 首先要搞清楚 JavaScript 如何存储小数.和其它语言如 Java 和 Python 不同,JavaS…
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”:它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式). IEEE 754规定了四种表示浮点数值的方式:单精确度(32位).双精确度(64位).延伸单精确度(43比特以上,很少使…
在程序运行中,其值不能改变的量成为常量. 在基本数据类型中,常量可分为整型常量.实型常量.符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下: 目录: 一.常量 二.C语言标识符 三.变量     四.变量命名规则 附录:ASCII码表 一.常量 1.整型常量 即整常数,由一个或多个数字组成,可以带正负号 C语言中整型常量可用十进制.八进制和十六进制3种形式表示 十进制整数:由0~9数字组成,不能以0开始,没有前缀 八进制整数:以0为前缀,其后由0~7的数字组成,没有小数部分 十六…
程序基本结构 常量变量标识符 数据类型 整型类型 浮点类型(实型) 基本类型转换 字符串 函数类型 枚举类型 enum 数组类型 结构体类型 共用体类型 字符串函数 运算符 流程控制语句 输入输出语句 printf scanf putchar和getchar 变量和函数的存储类别 变量的存储类别 函数的存储类别 指针 创建指针变量 指针变量在数组中的应用 指针变量在字符串中的使用 指针变量在函数中的使用 指针变量在结构体的使用 指针的其他应用 typedef 文件操作 打开文件 权限控制 标准流…
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/strengthen/p/10989143.html ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章…