jjzjj

PRECISION

全部标签

Java 错误 : possible loss of precision

我正在制作一个加密任何类型文件的小型Java程序。我这样做的方式如下:我打开输入文件,在与该文件大小相同的字节数组中读取它,然后进行编码,然后将整个数组写入名为输出的.dat文件。数据。为了索引字节数组,我使用了一个int类型的变量。代码:for(inti:arr){if(i>0){arr[i]=arr[i-1]^arr[i];}}'arr'是一个与输入文件大小相同的字节数组。我得到的错误:CodingEvent.java:42:error:possiblelossofprecisionarr[i]=arr[i-1]^arr[i];(箭头指向^运算符)必需:字节发现:整数怎么了?你能帮

java - Float vs double Math Java

以下是否存在精度差异(假设a和b的值可以在不损失精度的情况下用float表示)。有花车:floata;floatb;doubleresult=1+a*b;double:doublea;doubleb;doubleresult=1+a*b; 最佳答案 简单的例子:floata=16777217;//Largestintexactlyrepresentableinafloat.floatb=16777217;System.out.println((double)(1+a*b));doublec=16777217;doubled=1677

java - Java 中的 x86 80 位浮点类型

我想在Java中模拟x86扩展精度类型并执行算术运算和转换为其他类型。我可以尝试使用BigDecimal来实现它,但是涵盖所有围绕NaN、无穷大和强制转换的特殊情况可能是一项乏味的任务。我知道一些库提供的其他浮点类型的精度高于double,但我希望具有与x8680位浮点相同的精度。有没有提供这种浮点类型的Java库?如果没有,您能否提供其他提示,以比提出自定义BigDecimal解决方案更轻松地实现此类数据类型? 最佳答案 如果您知道您的Java代码实际上将在x86处理器上运行,请在汇编(或C,如果C编译器支持的话)中实现80位算法

java - 为什么 java.awt.Point 提供设置和获取 double 值的方法,但将 x 和 y 存储为 int 值?

正如您在java.awt.Point的Oracle文档中看到的那样,x和y存储为int。但是,getX和getY返回double。虽然有一个setLocation方法接受2个double类型,但没有构造函数这样做。此外,无论如何,double都会在内部被截断为int。这有充分的理由吗?您可以通过使用采用double类型的方法来避免对setLocation进行强制转换,但是当您调用getX和getY。通过从getX和getY返回double,也存在对Point类精度的错误表述。 最佳答案 因为它继承自Graphics2D抽象类中使用的

java - 为什么转换为 float 在 java 中产生正确的结果?

System.out.println(2.00-1.10)和System.out.println((double)(2.00-1.10))两者输出相同的结果0.8999999999999999,但是System.out.println((float)(2.00-1.10))输出0.9。也许默认情况下Java以double执行计算,那么为什么向下转换会更正结果?如果1.1以double形式转换为1.100000000000001那么为什么会这样System.out.println((double)(1.10))仅输出1.1。编辑:要了解发生这种情况的原因,我们需要了解这两个答案。首先,规

java - tan 45 给我 0.9999

为什么tan45(弧度为0.7853981633974483)给我0.9999?以下代码有什么问题?System.out.println(Math.tan(Math.toRadians(45.0)));我不认为这里有任何错字。那么这里的解决方案是什么? 最佳答案 浮点计算通常会导致这种不准确。问题在于无法在固定位数内准确表示数字。再举一个例子(十进制),我们都同意3*(1/3)=1。但是,如果您的计算器只有4位小数,1/3将表示为0.3333。当它与3相乘时,您将得到0.9999而不是1。作为进一步的信息,大多数系统上的浮点通常使用

可能导致精度或幅度损失的 Java 隐式转换?

这个问题在这里已经有了答案:Whydon'tJava's+=,-=,*=,/=compoundassignmentoperatorsrequirecasting?(11个答案)关闭5年前。我最近learned,在将一些Java代码转换为C#时,Java的增量运算符'+='隐式转换为LHS的类型:inti=5;longlng=0xffffffffffffL;//largerthanInt.MAX_VALUEi+=lng;//allowedbyJava(i==4),rejectedbyC#相当于:(detailshere)inti=0;longlng=0xffffffffffffL;i=(

Java双丢精度计算

我在Java中有以下双重计算:doubleC1=somevalue;//It'salwaysanintegerdoubleC2=somevalue;//It'salwaysinteger,andC2>=C1doubleS=somevalue;//It'salways0现在,如果我们没有丢失精度,C3==C1将为真。但是由于我们失去了精度,C3和C1是否仍然始终相等?如果它们不总是相等,如果我有C1、C2、S和C3,如何修改rate以确保计算后C3等于C1?注意:不幸的是,使用BigDecimal不是一种选择。 最佳答案 一般我们不会

java - 生成pi到第n位java

我想知道如何生成第n位的圆周率。我有几个基本想法。使用Math.PI并提高精度(如果可能的话)使用欧拉公式生成圆周率,但即使在这里,我也需要提高精度(我认为)还有SrinivasaRamanujan的PI生成公式,该公式以收敛速度快着称。这个公式似乎很难实现。我相信,我还必须在这里提高deicmal精度。所以简而言之,无论哪种方式,我都需要根据第n个数字是多少来提高BigDecimal的精度。我将如何着手将BigDecimal的精度提高到第n个数字?另外,如果有更好更快的方法,请指出正确的方向。编辑:我只想生成PI。我不想用于计算。这是一个关于如何使用BigDecimal来实现我生成P

java - 断言等于精度

我对assertEquals中的增量/精度感到困惑。我知道0.034会给我除法代码的精度,如下所示:publicvoidtestDivide(){assertEquals(3.0,Arithmetic.divide(12.0,4.0),0.0);assertEquals(3.3,Arithmetic.divide(10.0,3.0),0.034);//fail("Notyetimplemented");}但是,我尝试将其更改为0.03,测试失败。另一方面,当我将其更改为0.04时,它会成功,或者即使将其更改为0.034444等等,也会成功。我可以知道这个数字是什么意思,我们如何使用它?