编程范式 epesode2 negative values, float 精度
episode2
//it is very interesting,an excellect teacher, I love it
1,why negative is indicated the way it is indicated
2,how float is indicated
3,type conversion of negative integer type
4,type conversion between float and intergral type
----types
----negative denotation:why use the way that reverse all the bits and add 1 to represent negative dates.//very clear explain,very excellent teacher.
--take 7 for example, if use 1000 0111 as -7, than do the add operation between 7 and -7,the result is -14.
0000 0111
+ 1000 0111
= 1000 1110
of course this does not work.
--we want 7 and -7 to get full 0,now firstly we try the result full 1,because full 1 is easier to calculate than full 0. like
0000 0111
+ ???? ????
= 1111 1111
we can see what we need is
1111 1000
it it the reverse of 7:0000 0111,
--to get the result full 0, we need to add 1 to the current full 1,
1111 1111
+ 0000 0001
=10000 0000 the1 in the result is overflow,and does not count, so get 0,which is what we want.
therefore, the data we calculted should add 1 correponding to get the full 0.
which is 1111 1000 + 1,
the above is why negative dates are indicated in its way: reverse all the bits(execpt the sigh bit) and add 1.
--char, short, int, long, type conversion
--unsigned type, the simplest way, follow the protocal, electronics does not care the lost bytes.
small bytes to big bytes, just copy to low bytes.
big bytes to small bytes, cut the high bytes,use the low bytes.
--signed type, render sign expansion
to keep the signed characteristic, with negative sign, all expanded bits should be 1.domino effect
1000 0111
0000 0000 0000 0000
1111 1111 1000 0111 domino effect
----float
float:
|
1bit(符号位) |
8bits(指数位) |
23bits(尾数位) |
double:
|
1bit(符号位) |
11bits(指数位) |
52bits(尾数位) |
4 bytes, 有2^32个映射能够表示 -2^31到2^31-1个数。
--float protocal: (符号s) 1.xxxxx *2^(exp-127)
1位符号位s,8位exp, 23位表示小数点后的数据.xxxx
对于exp,magnitude only, int 0-255, 这意味着指数的范围是-127到128
对于23位.xxxx, when all 1, means 1减去2的-23次方,是一个与1很接近的数。当这23位 all 1 再加上1后,这个float数据就变成一个能被2整除的数。
_______________
_关于取值范围
float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
_关于精度: 就是小数点后能有多少位
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496 ,一共16位,其精度为15~16位。
__________________________________
--eg. 7
7.0 * 2^0
3.5 * 2^1
1.75*2^2
乘号左边范围是,1-1.9
乘号右边指数不能小于-127,否则type double love it .
----float and int , types conversion
--eg1,
int i =5;
float f =i;
cout<<f<<endl; // f is printed 5.000000
--eg2,
int i = 37;
float f = *(flat*)&i;// f is a very very small thing, barely meaningful
--eg3,
float f=7.0;
short s = *(short*)&f;
for the 4 types of the float date, the pointer point at the highest byte address,thus the short date get the high two bytes.
编程范式 epesode2 negative values, float 精度的更多相关文章
- ReactiveX编程范式
ReactiveX http://reactivex.io/ An API for asynchronous programmingwith observable streams The Observ ...
- 编程范式感想(一)——在C中进行对模板功能的实现
最近一直在看网易公开课上的编程范式的公开课,斯坦福的教授讲的真的非常到位,感觉还是要好好学习下C还有汇编,熟悉下计算机的内存机制什么的. 大家都知道关于模板或者说范式的问题,基本在很多高级语言上都有实 ...
- 【编程范式】C语言1
最近在网易公开课上看斯坦福大学的<编程范式>,外国人讲课思路就是清晰,上了几节课,感觉难度确实比我们普通大学大很多,但是却很有趣,让人能边学边想. 范式编程,交换两个数,利用 void * ...
- 编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)
主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 命令式编程: 命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么. 比如:如果你想在一个数字集合 collec ...
- Linux Kernel C语言编程范式
介绍 不同的编程语言具有不同的抽象原语(如下),有的原语抽象层次低,有的原语抽象层次高.其中函数式.DSL是这几年十分热门的编程语言概念. 过程式抽象原语:变量 对象式抽象原语:对象 函数式抽象原语: ...
- 冒号课堂 编程范式与OOP思想
上篇:编程范式与编程语言 第1课 开班导言 第2课 重要范式 第3课 常用范式 第4课 重温范式 第5课 语言小谈 第6课 语言简评 下篇:抽象机制与对象范式 第7课 抽象封装 第8课 抽象接口 第9 ...
- Python3学习之路~6.1 编程范式:面向过程 VS 面向对象
编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...
- Edit Distance问题在两种编程范式下的求解
本文已授权 [Coding博客](https://blog.coding.net) 转载 前言 Edit Distance,中文叫做编辑距离,在文本处理等领域是一个重要的问题,以下是摘自于百度百科的定 ...
- jQuery中的编程范式
浏览器前端编程的面貌自2005年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了 ...
随机推荐
- Python 基礎 - 認識模塊
什麼是模塊?簡單說就是別人寫好了一堆功能,封裝在一起. 模塊有分二種,一個是之前有提到的 標準庫,就是不需要透過額外的安裝就有的模塊 ,另一個叫 第三方庫,需要另外安裝才能使用的模塊 #!/usr/b ...
- Eclipse上运行第一个Hadoop实例 - WordCount(单词统计程序)
需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入两个文件,其一内容如下: hello world hello had ...
- AppStore 内购验证的方法
AppStore增加了验证内购(In App Purchasement)的方法, 就是苹果提供一个url地址, 开发测试用: https://sandbox.itunes.apple.com/veri ...
- JPush极光推送Java服务器端API
// 对android和ios设备发送 JPushClient jpush = new JPushClient(masterSecret, appKey); // 对android和ios设备发送 ...
- 第七课 第二节,T语言流程语句(版本5.0)
while语句 循环结构是程序中一种很重要的结构其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止给定的条件称为循环条件,反复执行的程序段称为循环体 (注:关键字,while,end) ...
- js isnull 赋值方法
<script>var b = 'test';var a = b || {};alert(a)</script> 结果:test <script>var b;var ...
- open Live Writer配置步骤
一.关于 Open Live Writer 微软推出的一款能够免费使用的博客写作软件,主要为用户提供博客在线撰写和编辑功能,可以离线编辑,联网时同步到各大博客网站上去. 接下来,介绍如何使用这款工具发 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计
自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的 ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- bootstrap初接触
Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架.(主要是结合HTML5 CSS3的样式, 基于jquery+Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以 ...