浮点

浮点类型丢失精度的问题

匿名 (未验证) 提交于 2019-12-02 23:52:01
想写下这个问题是因为前两天有一个需求,需要把设立数据库的某字段为double类型,并且该字段值会参与比较,我就想到把这个记下来,其实数据库中还是要尽量避免浮点类型的数据参与运算或比较的。 首先我们要理解为什么浮点类型的数据会丢失精度,就要先理解为什么整型数据不会丢失精度。在计算机世界中,所有的数字在底层都会被转化成0和1组合的机器码。在大学里的第一件事就是学会怎样在十进制和二进制之间转换,比如十进制5转换成二进制的步骤如下: step1:5/2=2.....1 step2:2/2=1.....0 step3:1/2=0.....1 从下至上的101便是5的二进制,这是整数,模2的余数只有0和1两种情况,也就是说任何一个整数,我们不断模2到最后的必定会得到1/2=0.....1的情况,只要是整数,就必定会这样。因此,十进制整数转为二进制是唯一的。 那么十进制的小数是怎样转换成二进制的呢?十进制的小数转换为二进制,主要是小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0。那么我们考虑如下的情况,以0.1为例: 最后送大家一个tip(来自Alibaba Java开发手册):在要求绝对精确表示的业务场景下,比如金融行业的货币表示,推荐使用整型存储其最小的单位的值,展示时可以转换成该货币的常用单位,比如人民币使用分存储,美元使用美分存储。在要求精度表示小数点N位的业务场景下

c语言(基础重点)

匿名 (未验证) 提交于 2019-12-02 23:48:02
字节数 (1)整数类型: 短整型 short 2 整型 int 4 长整型 long 4 不同的操作系统不同 4或8 (2)浮点型: 单精度浮点型 float 4 双精度浮点型 double 8 (3)字符型: char 1 补码:(1)正数:原码就是补码(原码补码反码一样) (2) 负数:反码(不包括符号位)+1

(1)DSP TMS320C6713学习 概论

匿名 (未验证) 提交于 2019-12-02 23:40:02
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZenNaiHeQiao/article/details/91453447 DSP 特点: 在大部分的DSP算法中,乘积和(sum of product, SOP)是最基本的单元。 DSP对乘法和加法做了优化,乘法与加法在DSP上一般在一个指令周期内完成,这也是为什么DSP适用于做信号处理的原因。 浮点DSP与定点DSP的使用场合对比: TMS320C6713B是一款浮点型DSP 浮点DSP一般用于高精度、宽的动态范围、高信噪比,一般比较容易使用。定点DSP具有更低的功耗,更便宜,相对尺寸更小。 TMS320系列DSP TI C6000系列主要分为C64x,C62x,C67x三个子系列,C62x与C64x都是定点DSP,C67系列为浮点DSP。 更多细节参考 http://www.ti.com/lsds/ti/dsp/c6000_dsp/products.page 文章来源: https://blog.csdn.net/ZenNaiHeQiao/article/details/91453447

模型压缩相关工作

匿名 (未验证) 提交于 2019-12-02 22:56:40
总结的很好的一篇博客:https://blog.csdn.net/App_12062011/article/details/81665140 定点化:     百度搜“模型压缩定点化”     https://blog.csdn.net/u011961856/article/details/76736103     http://fjdu.github.io/machine/learning/2016/07/07/quantize-neural-networks-with-tensorflow.html     https://petewarden.com/2015/05/23/why-are-eight-bits-enough-for-deep-neural-networks/ 基于量化的模型压缩 所谓量化,指的是减少数据在内存中的位数操作,例如,对于权重来说,如果大多数都在0附近,那么32位的浮点表示,其实是有很大浪费的。这一方向的研究,主要是8位类型来表示32位浮点(定点化),甚至直接训练低8位模型,二值模型。其作用不仅可以减少内存开销,同时,可以节省带宽,通过某些定点运算方式,甚至可以消除乘法操作,只剩加法操作,某些二值模型,直接使用位操作。当然,代价是位数越低,精度下降越明显。 一般情况下,采用8位定点运算表示,理论上,可以节省4倍内存,带宽,但是实际上

浅谈编程中的位操作

匿名 (未验证) 提交于 2019-12-02 22:56:40
昨天有同学谈起网络编程中各种奇怪的位运算,所以单独整理一下实践中的位运算,权当复习。 基本的位运算 位运算符包括与,或,非,异或,这属于common sence了,只要给出一段01二进制串,每个程序员应该都可以处理。 无论编程语言中的类型怎样,只要涉及网络通信,存储,最终都会涉及一个字节的转换过程。对于java来说,主要考虑整型,浮点型,字符串,其中整型和字符串是最常用的。 整型,在java都是有符号数,根据不同类型都有固定的字节长度,并采用补码形式。关于补码,可以看看这篇文章 关于2的补码 。 浮点型,包括单精度和双精度,采用IEEE的浮点表示法,比较少使用,可以通过深入理解计算机系统2.4.2 IEEE浮点表示,这个章节了解浮点数的二进制形式。 字符串,java的字符串采用unicode字符表示,存储的时候通常得考虑字符编码,所谓字符编码,就是字符和字节的对应关系。有些api会允许直接写入或读取字符串,但是对底层采用的字符编码要心里有底。 例如一个数,0x12345678, 存储到0x01到0x04这4个字节,那么有2种方式,一种是12345678,叫大端法,一种是78563412,叫小端法。就是看最低有效位(78)是在高地址(04)还是低地址(01)。这方面找了个文章 理解字节序 ,可以了解一下。 tcpip协议规定网络传输统一采用大端法。指的是ip,tcp等协议的头部信息

(转)Python格式转换

匿名 (未验证) 提交于 2019-12-02 22:54:36
原文:http://blog.csdn.net/huangfu77/article/details/54807835 格式 描述 %% 百分号标记 #就是输出一个% %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) %x 无符号整数(十六进制) %X 无符号整数(十六进制大写字符) %e 浮点数字(科学计数法) %E 浮点数字(科学计数法,用E代替e) %f 浮点数字(用小数点符号) %g 浮点数字(根据值的大小采用%e或%f) %G 浮点数字(类似于%g) %p 指针(用十六进制打印值的内存地址) %n 存储输出字符的数量放进参数列表的下一个变量中 -------------------------------------------------------------------------- %格式化符也可用于字典,可用%(name)引用字典中的元素进行格式化输出。 负号指时数字应该是左对齐的,“0”告诉Python用前导0填充数字,正号指时数字总是显示它的正负(+,-)符号,即使数字是正数也不例外。 可指定最小的字段宽度,如:"%5d" % 2。也可用句点符指定附加的精度,如:"%.3d" % 3。 e.g. # 例:数字格式化 nYear = 2018 nMonth = 8 nDay = 18 #

PHP浮点计算结果返回异常问题

匿名 (未验证) 提交于 2019-12-02 22:11:45
php中如果直接小数点进行计算的话。比如16.8*3 var_dump是50.4。 但是return就变成了50.400000000000006。 至于是什么原因本人尚不得而知。 解决方法是用把计算放入下面的方法计算: function PriceCalculate($n1, $symbol, $n2, $scale = '2') { $res = ""; if (function_exists("bcadd")) { switch ($symbol) { case "+"://加法 $res = bcadd($n1, $n2, $scale); break; case "-"://减法 $res = bcsub($n1, $n2, $scale); break; case "*"://乘法 $res = bcmul($n1, $n2, $scale); break; case "/"://除法 $res = bcdiv($n1, $n2, $scale); break; case "%"://求余、取模 $res = bcmod($n1, $n2, $scale); break; default: $res = ""; break; } } else { switch ($symbol) { case "+"://加法 $res = $n1 + $n2; break; case

java中对于浮点型数据操作

匿名 (未验证) 提交于 2019-12-02 21:53:32
java的基本数据类型-浮点型:单精度(float)和双精度(double)。   float:单精度浮点数在机内占 4 个字节、有效数字 8 位、表示范围: -3.40E+38 ~ +3.40E+38;   double:双精度浮点数在机内占 8 个字节、有效数字 16 位、表示范围: -1.79E+308 ~ +1.79E+308 浮点型计算速度快,但是精度低,float和double只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算,但是BigDecimal是引用类型,不是基本类型。  通过float、double来构建BigDecimal对象; BigDecimal的方法: public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法 BigDecimal的工具类MathOperation /** * 由于Java的简单类型不能够精确的对浮点数进行运算

PHP的数据类型

狂风中的少年 提交于 2019-12-02 18:41:13
一、标量类型 整型、浮点型、字符串、布尔 1、整型 $a=10 (十进制) $b=046 (八进制) $c=0x12 (十六进制) 2、浮点型 $a=10.564 $b=4E-5 3、字符串 $a='adcfv'; 4、布尔(逻辑的真和假) true 和 false 二、复杂类型 数组、对象 1、数组 $arr = [1,2,3,4]; 2、对象 class People{ function eat(){ echo 'people can eat'; } } 三、特殊类型 NULL 来源: https://www.cnblogs.com/chenyuphp/p/11758112.html

Java的数据类型

扶醉桌前 提交于 2019-12-02 14:37:49
Java的数据类型 Java 语言中的数据类型分为两大类:一类是基本数据类型;另一类是引用数据类型。 定义变量是为了在内存中给数据开辟空间,方便后续的使用;定义变量的基本数据类型是为了节省内存空间。减少浪费,说简单点就是要求一个人最好只睡单人床,两个人睡双人床,最大限度的提高利用效率。 基本数据类型 基本数据类型有8中,包括:4种整型:byte(字节型)、short(短整型)、int(整型)、long(长整型);2种浮点型:float(单精度浮点)、double(双精度浮点);布尔型为 boolean 和字符型为 char 。 基本数据类型为什么会有这么多?其实计算机内存在早期很昂贵,浪费内存空间就是浪费金钱,所以较多的数据类型可以使计算机内存空间利用最大化。 byte 字节型 占用数据位:8 占用字节数:1 取值范围:-2^7~2^-1 定义方式:byte a = 66; 默认值:0 short 短整型 占用数据位:16 占用字节数:2 取值范围:-2^15~2^15-1 定义方式:short a = 66; 默认值:0 int 整型 占用数据位:32 占用字节数:4 取值范围:-2^31~2^31-1 定义方式:int a = 66; 默认值:0 long 长整形 占用数据位:64 占用字节数:8 取值范围:-2^63^2^63-1 定义方式:int a = 66L; 默认值是