最近在使用Java中需要使用PQ形式的私钥进行RSA加解密运算,本来以为Java中应该很多类似的例子,发现所有的例子都是从ND形式的私钥,竟然没有人用分量P和Q计算N和D进行运算.对Java使用RSA运算不太熟,只能自己一点一点搞了.身边的Java 的仙们,好像身边都没人中国剩余定理,所以也不会遇到P和Q?不管他们了,开工了. 1.BigInteger类 Java中有现成的大数运算的BigInteger类,直接使用这个类进行运算即可,总结一下使用中遇到的坑.Java的大数多1bit表示符号,所以…
Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat 首先吐槽一下,Date和Calendar实际用起来还是有一些别扭的,刚开始用的时候不熟悉,老是分不清Date和Calendar类的具体用法和区别. 而且Calendar类的set方法来设置日期时又有一些反人类,设置月份的时候总是要脑补一下减去1,比如要设置为2018年1月6日就要设置成2018,0…
下面都是从String类的源码中粘贴出来的 private int hash; // Default to 0 public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; } 下面利用上…
原码 反码 补码的定义与运算 1原码: 原码是将十进制或者其他进制的数转换为二进制表示(且要根据数据的类型转换) 如:130 (默认是Int类型,则是4个字节) 原码是:00000000 00000000 00000000 100000010 2反码: 1.当原码是正数时,反码就是原码 2.当原码是负数时,反码是除了第一位的符号位以外的位数全部取反 3补码: 1.当原码是正数时,反码就是原码 2.当原码是负数时,补码是反码+1 byte b = (byte) 130 ; 计算机操作中对数据的分析…
一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecimal原理,只是说明BigDecimal和浮点的区别以及其应用场景. 借用<Effactive Java>这本书中的话: float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全…
本节涉及: 保存TensorFlow 的模型供其他语言使用 java中调用模型并进行预测计算 一.保存TensorFlow 的模型供其他语言使用 如果用户选择“y” ,则执行下面的步骤: 判断程序执行目录下是否有 export 目录,如果有,调用 shutil 包中的 rmtress 函数将其删除,以免冲突 builder = tf .saved_model . builder . SavedModelBuilder ("export")   ———— 用于生成保存神经网络模型的对象b…
今天舍友突然问我"在java中 a+=b 和a=a+b 有什么区别",说这是一道面试题.当时就不假思索的回答:"一样啊",然后他说有位面试者也回答说一样,所以被淘汰了.当时感觉很惊奇,书上写的就是一样,怎么会?于是就查了一下,并且自己到eclipse中试了一下,原来他们之间还真的有区别. 在java语言中,a+=b和a=a+b的主要区别是在运算的精度上.类似的有"-= . *= ./= .%= ",这里以a+=b 与 a=a+b 举例说明一下.…
例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1; a += 1; System.out.print(a); 这种情况不会报错.java语言规范中关于复合赋值的解释是这样的:E1 op= E2等价于E1=(T)(E1 op E2),这里的T是E1的数据类型,即复合赋值是自带了隐式的强制类型转换的. 第三种情况: short a = 1; shor…
例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1; a += 1; System.out.print(a); 这种情况不会报错. java语言规范中关于复合赋值的解释是这样的:E1 op= E2等价于 E1=(T)(E1 op E2),这里的T是E1的数据类型,即复合赋值是自带了隐式的强制类型转换的. 第三种情况: short a = 1; sh…
public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.println(4.015*100);        System.out.println(123.3/100);    }};你没有看错!结果确实是0.060000000000000005…
package com.chauvet.utils; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; /*** * * 金额 * * 如果需要精确计算,必须用String来够造BigDecimal! !! * * Java里面的商业计算,不能用float和double,因为他们无法 进行精确计算. * 但是Java的设计者给编程人员提供了一个很有用的类BigDe…
package com.zf.s2;//创建一个包   import java.math.BigInteger;//导入类 import java.util.ArrayList; import java.util.List;   public class TextFactorial {//操作计算阶乘的类     public static int simpleCircle(int num){//简单的循环计算的阶乘         int sum=1;         if(num<0){//…
一.问题的提出: 如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.println(4.015*100);        System.out.println(123.3/100);    }};你没…
如果我们编译运行下面这个程序会看到什么? public class Test  {    public static void main(String args[]) {                System.out.println(0.05 + 0.01);        System.out.println(1.0 - 0.42);        System.out.println(4.015 * 100);        System.out.println(123.3 / 100…
在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的BigInteger可以实现大整数的表示和计算.BigInteger 还提供以下运算:模算术.GCD 计算.质数测试.素数生成.位操作以及一些其他操作. 下面通过程序来看看具体用法: import java.math.BigInteger; public class BigInt { public sta…
计算价格, java中浮点数精度丢失的解决方案…
在刚刚做完的一个项目中,遇到了double型计算不精确的问题.到网上查找后,问题得到解决.经验共享,在这里总结一下. Java中的浮点数类型float和double不能够进行精确运算.这个问题有时候非常严重.比如,经过double型直接计算,1.4×1.5有时会得出2.0999999999999996的结果,但实际上,应该得到2.10.而且,类似的情况并不仅限于乘法计算. 在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有.所以,在商业计算中我们要用:java.math.Big…
Java中浮点型数据Float和Double进行精确计算的问题 来源  https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失       大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况.来看下面的例子. // 这是一个利用浮点型数据进行精确计算时结果出错的例子,使用Java编写,有所省略. double a = (1.2 - 0.4) /…
标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.…
        今天在公司项目中,发现一个计算运费的妙招.由于运费规则各种各样,因此写一个公式存到数据库.下次需要计算运费时,直接取出这个公式,把公式的未知变量给替换掉,然后计算出结果就是ok了. 一.先看几张图 (1)数据库存的公式          (2)怎么在java代码中计算出结果,见下面2张图                  这图,是在map集合中存了 key为"\\$w"  value为重量的参数.关键是下面这图                  这图中方法接收参数为 (…
首先jdk中定义int占4个字节 ===> 32位(后面全部的计算都是以此为根据的) 32位就是jvm仅仅给分配32个格子的空间,用以存放数据. 总所周知计算机中用0和1存放数据. 那么,32个格子中放满0或1的方法 有2的32次方种: 所以.这32个格子中.或者说32位的空间能标识10进制的数字: 最小 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 最大 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1…
1.引言 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合.但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦. 2.BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成.如果为零或正数…
一.计算对象大小的方法 Java中如何计算对象的大小呢,找到了4种方法: 1.java.lang.instrument.Instrumentation的getObjectSize方法: 2.BTraceUtils的sizeof方法: 3.http://yueyemaitian.iteye.com/blog/2033046中提供的代码计算: 4.https://github.com/mingbozhang/memory-measurer提供的工具包: 本质上java.lang.instrument…
今天面试遇到一个问题,假设一个类中只声明一个int类型,那么这个对象多大,这里先写出解决方案,首先引入内存计算工具lucene-core, <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>4.0.0</version> </dependency> 然后编写类 publi…
[本文相关的代码放在github上.地址为:https://github.com/VigourJiang/StructuredFloat] Java中double类型的格式基本遵循IEEE 754标准. 虽然数学意义上的小数是连续的.但double只能表示当中的一些离散点.把这些离散点组成的集合记为S.S的大小还是有限的.假设要保存的小数P刚好在集合S内,那么double类型就能精确的表示P:否则double类型只能从集合S中找一个与P近期的离散点P'取代P. 以上表述对于float也成立.IE…
背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authenticator; public class IntegerTest { public static void main(String[] args) { long endTime = System.currentTimeMillis(); long startTime = endTime - 30…
java中的float.double计算存在精度问题,这不仅仅在java会出现,在其他语言中也会存在,其原因是出在IEEE 754标准上. 而java对此提供了一个用于浮点型计算的类——BigDecimal(java.math.BigDecimal),通过将double替换成BigDecimal进行计算可以获得较为精确的计算结果. BigDecimal的构造方法有许多,在此推荐使用BigDecimal(String val)的构造方法,通过String字符串进行构造.可能会有人直接使用BigDe…
* 使用BigDecimal需要注意的事项:  * 1.两个BigDecimal值不能使用" +, -, *, / " 进行加减乘除,要使用" add, substract, multiply, divide ";  * 2.两个BigDecimal值比较使用compareTo方法, 比较结果有-1, 0, 1, 分别表示小于, 等于, 大于; 对于0, 可以使用BigDecimal.ZERO表示;  * 3.提供(相对)精确的除法运算.当发生除不尽的情况时,由sc…
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼镜,真正能写出来的人竟然寥寥无几,很多人写了一整张A4纸都写不下,最后还是没写完...他们在做什么? 先取出今天的日期,然后分别计算得出年.月.日的值,然后将给定的字符串进行切割,得到目标的年.月.日,然后再判断是否闰年之类的逻辑,决定每月应该是加28天还是29天还是30或者31天,最后得出一个天数…
 对于java,其是不支持直接创建泛型数组的.当采用如下的方式去创建一个泛型数组时,其会出现错误,编译无法通过的情况. package other.jdk1_5; /** * 该类用于演示泛型数组的创建 * @author 学徒 * */ public class Generics<T> { T[] a=new T[]; } 报错的信息: Multiple markers at this line - Cannot create a generic array of T - Variable…