Tag: math

不可预知的双重

可能重复: .NET上的双精度问题 双重计算产生奇数结果 我知道双值0.2内部represantation类似于0.199999 。 但是下面的代码仍然让我感到困惑。 码: public static void main(String[] args) { double d= 0.3d; double f= 0.1d; System.out.println(d+f); System.out.println(d*f); System.out.println(d); System.out.println(f); System.out.println(df); System.out.println(d/f); System.out.println((df)*(df)); } OUTPUT: 0.4 0.03 0.3 0.1 0.19999999999999998 2.9999999999999996 0.039999999999999994 实际上发生了什么? 加法,乘法顺利,但减法,除法不是。 任何人都可以详细说明为什么加法与减法不同 ?

tan 45给了我0.9999

为什么tan 45 (弧度为0.7853981633974483)给我0.9999 ? 以下代码有什么问题? System.out.println(Math.tan(Math.toRadians(45.0)) ); 我不认为这里有任何错字。 那么这里的解决方案是什么?

具有显着变化长度的输入的最佳StringBuffer初始容量是多少?

大家下午好,我正在使用java.lang.StringBuilder存储一些字符。 我不知道我要提前存储多少个角色,除了: 60%的时间,它只是(确切地)7个字符 39%的时间,(大约)3500个字符 1%的时间,大约是20k个字符 我们如何计算应该使用的最佳初始缓冲区长度? 目前我正在使用new java.lang.StringBuilder(4000)但这只是因为我以前懒得思考。

第n个根实现

我正在研究计算数字的第n 个根的方法。 但是,我遇到了负数的第 n 个根问题。 大多数人都说使用Math.pow(num, 1 / root) ,但这对负数不起作用。 我试过这个: public static double root(double num, double root) { if (num < 0) { return -Math.pow(Math.abs(num), (1 / root)); } return Math.pow(num, 1.0 / root); } 但是,它不适用于所有数字,因为根可以是小数。 例如, root(-26, 0.8)返回-58.71 ,但这是无效输入。 即使是根也会给出错误的答案。 例如, root(-2, 2) -1.41421 root(-2, 2)返回-1.41421 ,但-2没有平方根。

如何对多项式执行复杂的变量更改(在Mathematica中)

我有四个变量(w,x,y和z)中的整数多项式,我知道这些变量可以写成这六个变量中的整数多项式: a = wz b = xy c = w ^ 3 + z ^ 3 d = x + y e = w ^ 3 x + yz ^ 3 f = w ^ 3 y + xz ^ 3 如何使用Mathematica(或者Java)轻松地对变量进行这种更改?

Java Math.min / max性能

编辑:maaartinus给出了我正在寻找的答案,而tmyklebu的问题数据帮了很多,所以谢谢两者! 🙂 我已经阅读了一些关于HotSpot如何在代码中注入一些“内在函数”的内容,特别是对于Java标准Math libs( 来自这里 ) 所以我决定尝试一下,看看HotSpot可以直接做出多大的反对(特别是因为我听说min / max可以编译成无分支的asm)。 public static final int max ( final int a, final int b ) { if ( a > b ) { return a; } return b; } 那是我的实施。 从另一个SO问题我已经读过,使用三元运算符使用额外的寄存器,我没有发现在执行if块和使用三元运算符之间存在显着差异(即返回(a> b)?a:b)。 分配一个8Mb的int数组(即200万个值)并随机化它,我做了以下测试: try ( final Benchmark bench = new Benchmark( “millis to max” ) ) { int […]

检查BigInteger是不是一个完美的正方形

我有一个BigInteger值,假设它是282并且在变量x内。 我现在想写一个while循环,声明: while b2 isn’t a perfect square: a ← a + 1 b2 ← a*a – N endwhile 我如何使用BigInteger做这样的事情? 编辑:这样做的目的是我可以写这个方法 。 正如文章所述,必须检查b2是否不是正方形。

用于代数的Java / Scala库,数学

你能告诉我一些灵活,强大而又快速的库,它可以覆盖SciPy(性能和function)。 我发现SciPy很有表现力 – 但我想在Scala中尝试一些东西。 我读了一些关于Scala的内容 – 但不像SciPy那样精彩。 任何替代品? 也许Java库?

用Java查找笛卡尔积

我想找到一组元素的笛卡尔积。 这是一个例子 example 1 : sets :(ab) (bc) (ca) 笛卡儿的产品是, abc aba acc aca bbc bba bcc bca example 2 : sets : (zyx) bc 笛卡儿的产品是, zbc ybc xbc 所以我在想一个在java中执行的算法,它可以找到在编译时在开始时定义的特定数量的组的笛卡尔积。

线交叉矩形 – 如何找到交叉点?

我在canvas上画一个矩形,从矩形的中心到坐标空间中的一个随机点画一条线。 现在,我想按行矩形内的长度截断行,以便行从矩形边开始。 我怎么能这样做? 例 矩形可以由2个点定义: Pstart(1, 3) , Pend(3, 1) 中心点可以计算为: P(2, 2) 现在画出从P(2, 2)到Q(10, 2) 。 我知道矩形的宽度是2,我可以告诉该行从P(4, 2)而不是P(2, 2) 。 当该点与XY轴之一不平行时,这会变得更复杂。 此外,矩形内部的长度对于对角线而言将是不同的量。 如何计算线点相对于矩形中心和线的终点的起始偏移? 可能我必须找到线穿过矩形的点,然后让线从交叉点开始。 但我怎么能得到这一点呢?