浮点数

java.math包下计算浮点数和整数的类

守給你的承諾、 提交于 2020-02-24 23:21:15
(1)BigIntege:实现任意精度的整数运算。 (2)BigDecimal:实现任意精度的浮点运算。 例如: 使用BigDecimal进行浮点数比较 import java.math.BigDecimal; public class HelloWorld{ public static void main(String[] args){ BigDecimal a=BigDecimal.valueOf(1.0); a=a.subtract(BigDecimal.valueOf(0.1)); //subtract:减去 a=a.subtract(BigDecimal.valueOf(0.1)); a=a.subtract(BigDecimal.valueOf(0.1)); a=a.subtract(BigDecimal.valueOf(0.1)); a=a.subtract(BigDecimal.valueOf(0.1)); System.out.println(a); //输出:0.5 System.out.println(1.0-0.1-0.1-0.1-0.1-0.1); //输出:0.5000000000000001 BigDecimal b=BigDecimal.valueOf(0.1); BigDecimal c=BigDecimal.valueOf(1.0/10.0);

浮点数的表示方法(转,修改)

浪子不回头ぞ 提交于 2020-02-23 10:14:02
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。 无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表正,1代表为负 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 尾数部分(Mantissa):尾数部分 其中float的存储方式如下图所示: 而双精度的存储方式为: 以下120的二进制表示错误了应该是111 1000 R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制的科学计数法表示就为:8.25* ,而120.5可以表示为:1.205* ,这些小学的知识就不用多说了吧。而我们傻蛋计算机根本不认识十进制的数据,他只认识0,1,所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01,我靠,不会连这都不会转换吧?那我估计要没辙了。120.5用二进制表示为

浮点数的二进制表示

三世轮回 提交于 2020-02-23 10:12:40
基础知识: 十进制转十六进制; 十六进制转二进制; IEEE 制定的 浮点数 表示规则; 了解: 眼下 C/C++ 编译器标准都遵照 IEEE 制定的浮点数表示法来进行 float,double 运算。这样的结构是一种科学计数法,用符号、指数和尾数来表示,底数定为 2—— 即把一个浮点数表示为尾数乘以 2 的指数次方再添上符号。以下是详细的规格: 符号位 阶码 尾数 长度 float 1 8 23 32 double 1 11 52 64 下面通过几个样例解说浮点数怎样转换为二进制数 例一: 已知: double 类型 38414.4 。 求:其相应的二进制表示。 分析: double 类型共计 64 位,折合 8 字节。由最高到最低位各自是第 63 、 62 、 61 、 …… 、 0 位: 最高位 63 位是符号位, 1 表示该数为负, 0 表示该数为正; 62-52 位,一共 11 位是指数位; 51-0 位,一共 52 位是尾数位。 步骤:依照 IEEE 浮点数表示法,以下先把 38414.4 转换为十六进制数。 把整数部和小数部分开处理 : 整数部直接化十六进制: 960E 。小数的处理 : 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够 53 位即可了。隐藏位技术:

浮点数的二进制表示学习笔记

瘦欲@ 提交于 2020-02-23 10:11:34
最近和一个同事做关于浮点数的接口,顺带研究了一下。 基础知识: 十进制转十六进制; 十六进制转二进制; IEEE制定的浮点数表示规则; 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格: 符号位 阶码 尾数 长度 float 1 8 23 32 double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数 例一: 已知:double类型38414.4。 求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位: 最高位63位是符号位,1表示该数为负,0表示该数为正; 62-52位,一共11位是指数位; 51-0位,一共52位是尾数位。 步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。 把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理: 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。

python 变量类型 number

跟風遠走 提交于 2020-02-23 05:58:08
import random import math # python3支持的数值类型 int 整型 正负整数,不限大小 float 浮点型,正负小数 不限大小 complex 复数 a+bj 或者complex(a,b) # Python 数字类型转换 有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。 int(x) 将x转换为一个整数。 float(x) 将x转换到一个浮点数。 complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。 complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。 # 数字运算 数字运算在不同的机器上浮点运算的结果可能会不一样。 在整数除法中 / 除法 总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 // // 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系 ** 幂运算: 变量在使用前必须先"定义"(即赋予变量一个值,分配一个内存地址,即变量名),否则会出现错误: 不同类型的数混合运算时会将整数转换为浮点数 # 数学函数 fabs() 数学函数是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法 imprt math math.X() abs(x) 返回数字的绝对值

③ Python3.0 数字类型

半城伤御伤魂 提交于 2020-02-23 05:57:20
Python3 的六个标准数据类型中: 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组); 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。 数字类型 Python中数字有四种类型:整数、布尔型、浮点数和复数。 int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。 bool (布尔), 如 True和False。 float (浮点数), 如 1.23、3E-2 complex (复数), 如 1 + 2j、 1.1 + 2.2j Python支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。 内置的 type() 函数可以用来查询变量所指的对象类型, print(type(1)) 此外还可以用 isinstance 来判断: isinstance(1, int) 两者的区别在于: type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。执行结果如下: 可以通过使用del语句删除单个或多个对象 在使用过程中注意以下几点: 1、Python可以同时为多个变量赋值,如a, b = 1, 2。 2、一个变量可以通过赋值指向不同类型的对象。 3

java八大基本数据类型

一个人想着一个人 提交于 2020-02-23 05:43:51
java中八大数据类型的储存空间以及使用场景表示如下 )1.int:4字节,可以表示的数为-2^31 - 2^31-1。整数的默认类型。封装类也如此 。整数相除的时候,会舍弃小数部分。结果也是整数,例如 5/3 = 1;且整数在运算的时候,要注意内存溢出的问题。 )2.long:8字节,可以表示的数为 -2^63 -- 2^63-1。常用来表示int表示不了的整数类型。例如System.currentTimeMills()方法,返回的是1970.1.1到今天所经历的毫秒数。这个数字就是int所不能表达的,必须用long来表达。如果long类型还不能表达你所要的整数, 推荐用bigInteger,可以表示任意的整数 long a = 20;是可以的,但是如要使用他的封装类,那么数字后面必须加L/l 例如 Long a = 20L; )3.float:4字节,由于浮点数的默认类型是double,因此想使用float的时候就要在浮点数后面加f/F。整数后面可以不用加,因为这是强制转化。在封装类Float中,无论是整数还是浮点数,后面都要加f/F。 )4.double:8字节:常用来表示浮点数。默认的浮点数数据类型(Double中也如此)。且在计算机二进制中,无法正确的表示十分之一。所以会出现舍入误差。 如果double类也无法达到你所要表示的浮点数,推荐使用BigDecimal来表示

java 数据类型

不打扰是莪最后的温柔 提交于 2020-02-23 05:26:08
   Java学习笔记 ------- 数据类型      前言        java是强类型( strongly typed) 语言, 强类型包含两方面的含义:         1) 所有的变量必须先声明后使用         2) 指定类型的变量只能接受预支匹配的值        一, 基本数据类型        Java 的基本数据类型包括: Boolean , 字符型 和 数值类型             数值类型包括: 整形和浮点类型          boolean            大小:Java规范并没有强制指定Boolean 类型的变量所占内存大小           范围:true 和 false           例子:boolean a = false               boolean b = true          byte             大小:1个字节,即在内存中占8位           范围: -128~127, 即-2 7 ~2 7 -1           例子:byte a = 100;          short            大小:2个字节           范围:-32768~32767, 即:-2 15 ~2 15 -1           例子:short a = 10000        

python3笔记八:python数据类型-Number数字

為{幸葍}努か 提交于 2020-02-23 05:21:06
一:学习内容 数字类型分类:整数、浮点数、复数、布尔值 数字类型转换 数字类型的数学功能: abs ()、max()、min()、pow()、round()、math函数、random函数 二:数字类型分类 整数int 1. 整数:python可以处理任意大小的整数,当然包括负整数,在程序中的表示和数学的写法一样 2. 举例 num1 = 10 num2 = num1 #连续定义多个变量 num3 = num4 = num5 = 1 print(num3,num4,num5) #交互式赋值定义变量 num6, num7, num8 = 6, 7, 8 print(num6, num7, num8) 浮点数float 1.浮点型:浮点型整数部分与小数部分组成,浮点数可能会有四舍五入的误差 2.举例 f1 = 1.1 f2 = 2.2 print(f1 + f2) 复数complex 1.复数:实数部分和虚数部分构成,可以用a + bj 布尔型bool 1.一个布尔值只有True、False两种值 b1 = True b2 = False print(b1,b2) 三:数字类型转换 #浮点型转整数,向下取整,1.9取整为1 print(int(1.1)) print(int(1.9)) #整数转浮点数 print(float(1)) #字符串转整数 print(int("123"))

你真的用好了Python的random模块吗?

左心房为你撑大大i 提交于 2020-02-22 16:00:59
random模块 用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。 计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。 只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。 Python的这个库在底层使用通用的算法,经过长久的考验,可靠性没得说,但绝对不能用于密码相关的功能。 一、基本方法 random.seed(a=None, version=2) 初始化伪随机数生成器。如果未提供a或者a=None,则使用系统时间为种子。如果a是一个整数,则作为种子。 random.getstate() 返回一个当前生成器的内部状态的对象 random.setstate(state) 传入一个先前利用getstate方法获得的状态对象,使得生成器恢复到这个状态。 random.getrandbits(k) 返回一个不大于K位的Python整数(十进制)