jjzjj

java - Math.pow 在重复调用时产生不同的结果

升级到Java1.8.0_20后我们的测试系统报错,但是代码没有改。我发现,使用完全相同的输入参数调用的Math.pow()在重复调用时会产生不同的结果。在Java1.8.0_11中,它的行为符合预期并始终返回相同的值,但在Java1.8.0_20及更高版本中,它有时会返回略有不同的值。这类似于问题Math.powyieldsdifferentresultdependingonjavaversion,但有所不同,因为pow()的结果在一个VM中不同。以下JUint测试在Java1.8.0_20及更高版本下运行时失败importstaticorg.junit.Assert.assertE

java - 为什么 Math.pow(int,int) 比我天真的实现慢?

昨天看到一个问为什么Math.pow(int,int)这么慢的问题,但是这个问题措辞不当,没有研究成果,所以很快就关了。我自己做了一些测试,发现Math.pow方法在处理时确实比我自己的幼稚实现(甚至不是特别有效的实现)运行得非常慢带有整数参数。下面是我运行的测试代码:classPowerTest{publicstaticdoublemyPow(intbase,intexponent){if(base==0)return0;if(exponent==0)return1;intabsExponent=(exponent在我的电脑上(linux在intelx86_64cpu上),输出几乎总

java - 为什么 Math.pow(long, (1/3)) 总是返回 1?

如果是power问题,怎么写才正确? 最佳答案 这是因为1/3是整数除法,它的计算结果为0。您实际上是在提高到0次方,它总是产生1。请改用1.0/3.0。 关于java-为什么Math.pow(long,(1/3))总是返回1?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5066104/

java - 当 x = 0 时,Java 的 Math.pow(x, 2) 性能不佳

背景注意到我正在处理的Java程序的执行速度比预期的慢,我决定修改我认为可能导致问题的代码区域-调用Math.pow(x,2)从for循环中。与anotherquestionsonthissite相反,我创建的一个简单基准测试(最后的代码)发现用x*x替换Math.pow(x,2)实际上使循环加速了近70倍:x*x:5.139383msMath.pow(x,2):334.541166ms请注意,我知道该基准并不完美,并且肯定应该对这些值持保留态度-基准的目的是获得一个大概的数字。问题虽然基准测试给出了有趣的结果,但它并没有准确地对我的数据建模,因为我的数据主要由0组成。因此,更准确的测

java - 使用 Math.pow() 函数

我正在尝试用Java编写一个程序来计算Ricker小波的公式:但结果与真实不符。这是我正在使用的:privatestaticdoublerickerWavelet(doublet,doublef){doublep=(Math.pow(Math.PI,2))*(Math.pow(f,2))*(Math.pow(t,2));doublelnRicker=1-(2*p)*Math.exp(-p);returnlnRicker;}我是否错误地使用了数学函数? 最佳答案 要匹配公式,doublelnRicker=1-(2*p)*Math.ex

Java - 比 Math.pow() 和 Math.sqrt() 更快的替代方法

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我的程序使用Math.pow()计算一个相对较大的double的2次方。稍后我需要求一个非常大的double的平方根。问题是,我必须执行此操作超过100,000次,而且需要很长时间。有没有其他方法可以加快这个过程?谢谢编辑:我所说的大数字是指1000到10000之间(因此在计算方面可能没有那么大)。而在耗时方面,执行500次该功能大约需要30秒

(int)Math.pow(2,x) 和 1<<x 的 Java 结果不同

为什么以下两个操作在Java中对于x=31或32产生不同的结果,而对于x=3产生相同的结果?intx=3;intb=(int)Math.pow(2,x);intc=1结果:x=32:b=2147483647;c=1;x=31:b=2147483647;c=-2147483648;x=3:b=8;c=8 最佳答案 有多个问题在起作用:安int只能存储-2147483648之间的值和2147483647.1只有usesthelowestfivebitsofx.因此,1根据定义与1相同.Shift操作在two's-complementin

java - 使用递归的幂函数

我必须用Java编写一个强大的方法。它接收两个整数,它们是正数还是负数都没有关系。它的复杂度应该是O(logN).它还必须使用递归。我当前的代码有两个数字,但我一直输出的结果为零,我不知道为什么。importjava.util.Scanner;publicclassPowers{publicstaticvoidmain(String[]args){floata;floatn;floatres;Scannerin=newScanner(System.in);System.out.print("Enterinta");a=in.nextFloat();System.out.print("E

c# - Java 和 C# 中的 Math "pow"返回的结果略有不同?

我正在将程序从C#移植到java。我面对的事实是JavaMath.pow(0.392156862745098,1./3.)=0.7319587495200227C#Math.Pow(0.392156862745098,1.0/3.0)=0.73195874952002271最后一位数字会导致进一步计算出现足够的差异。有什么方法可以模拟c#的pow吗?谢谢 最佳答案 只是为了确认ChrisShain写的内容,我得到了相同的二进制值://JavapublicclassTest{publicstaticvoidmain(String[]a

c++ - 需要 pow(-1,1.2) 为 1

我将math.h与GCC和GSL一起使用。我想知道如何对此进行评估?我希望pow函数将pow(-1,1.2)识别为((-1)^6)^(1/5)。但事实并非如此。有人知道可以识别这些的C++库吗?也许有人可以分享他们的分解例程。 最佳答案 在数学上,pow(-1,1.2)根本没有定义。负数的小数指数没有幂,我希望没有库会简单地为这样的表达式返回一些任意值。你是否也期待这样的事情pow(-1,0.5)=((-1)^2)^(1/4)=1这显然是不可取的。此外,float1.2甚至不完全等于6/5。最接近1.2的double是1.19999