我正在开发一个允许我使用椭圆曲线的库。它仍然处于萌芽状态,到目前为止它只包括两个类, EllipticCurve 和 Point 。
现在我正在实施存在,归属,总和,反思等基本操作。
不幸的是,我现在已经陷入困境,我必须实现零的概念,即椭圆曲线E穿过P和-P线的点,其中P =(x,y)和 - P =(x,-y)。所以,我的问题可以改为"如何在无限远处实现一个点?"
到目前为止 Point 类的部分内容:
public class Point implements Comparable<Point> {
private static final BigDecimal MINUSONE = new BigDecimal(-1);
private BigDecimal x;
private BigDecimal y;
private EllipticCurve e;
public Point(BigDecimal x, BigDecimal y, EllipticCurve e) {
if(x != null && y != null && e != null) {
if(liesOn(x,y,e)) {
this.x = x;
this.y = y;
this.e = e;
}
}
}
public Point reflect() {
return new Point(x,y.multiply(MINUSONE),e);
}
public Point add(Point o) {
if(this.e == o.getE()) {
if(this == o) {
return this.multiply(2);
}
if(o == this.reflect()) {
return /*THE INFAMOUS ZERO POINT*/;
}
BigDecimal a;
BigDecimal b;
/*
* computation I still haven't implemented
*/
return new Point(a,b,e);
}
}
/*
* other methods
*/
}
PS:我知道java.security.spec.EllipticCurve的存在,但由于我将这个类主要用于数学目的,我觉得有必要创建我的个人库 ex从头
答案 0 :(得分:1)
无法使用BigDecimal
表示无穷大。我知道Java的唯一方法是:
Double.POSITIVE_INFINITY;
或Integer
,Float
等。您也无法从上面获取valueOf
,因为它会抛出NumberFormatException
。
您可以使用解决方法,i。即一个非常大的值,你知道它将永远比任何其他值大。