Я работаю над библиотекой, которая позволяет мне работать с эллиптическими кривыми. Он все еще находится в эмбриональном состоянии, и до сих пор он состоит только из двух классов: EllipticCurve и Точка.Точка нуля на эллиптической кривой
Сейчас я реализует основные операции существования, принадлежность, сумма, отражение и т.д.
К сожалению, я застрял теперь, что я должен реализовать концепцию нуля, т.е. точку эллиптическая кривая E, пересекающая линию через P и -P, где P = (x, y) и -P = (x, -y). Итак, мой вопрос можно перефразировать как «как я могу реализовать точку на бесконечности?»
Вот часть класса точки до сих пор:
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 novo.
У меня была эта мысль в моем сознании, но я использую BigDecimals вместо Double, потому что мне, вероятно, придется обрабатывать огромные числа. –
Да, я вижу проблему. Ну, как я уже сказал, насколько мне известно, вы просто не можете реализовать бесконечность в BigDecimal. Это, однако, Java, поэтому производительность не такая критическая, я думаю, что определение некоторого значения 'static', заменяющего бесконечность, никоим образом не повредит вам (но имейте в виду, что это скорее против хорошей практики программирования, и другие пользователи, вероятно, для этого ;)). –