- решает проблему с использованием только выбранных функций; < /li>
Неужем, если манипулируемые объекты - это целые числа, плавающие точки или другие, при условии, что эти объекты могут быть добавлены, если они могут быть связаны, если < /li>
. Идеальный квадрат. Остерегайтесь текста стены! < /P>
Предположим, что будет иметь константу интерфейса Java < /code> С следующими абстрактными методами, которые мы будем называть functions < /em>: < /p>
< /em>: < /p>
< /em>: < /p>
Код: Выделить всё
C add(C a); Код: Выделить всё
C subtract(C a);Код: Выделить всё
C multiply(C a);Код: Выделить всё
C[] divideAndRemainder(C b);Код: Выделить всё
C additiveInverse();Код: Выделить всё
C multiplicativeInverse();Код: Выделить всё
C additiveIdentity();Код: Выделить всё
C multiplicativeIdentity();Код: Выделить всё
int compareTo(C arg1);
Использование только этих методов может создать статический код Code>. dividerAndRemainder(C b); and compareTo(C arg1); allow to create algorithms for the greater common divisor, the bezout identity, etc etc...
Now suppose our Interface has a default method for the exponentiation:
Код: Выделить всё
public default C pow(int n){
if(n < 0) return this.additiveInverse().pow(-n);
if(n == 0) return additiveIdentity();
int m = n;
C output = this;
while(m > 1)
{
if(m%2 == 0) output = output.multiply(output);
else output = this.multiply(output.multiply(output));
m = m/2;
}
return output;
}
< /code>
Цель состоит в том, чтобы определить два метода по умолчанию < /code> с именем c root (int n) < /code> и c maximeRororAllowed () < /code> тако, что: < /p>
[list]
[*]x.equals(y.pow(n))[*]
Код: Выделить всё
C root(int n);[*] Интерфейс все еще может быть применен к любым типам чисел, включая, но не ограничивая как на целых числах, так и в плавающих точках.
[*]
Код: Выделить всё
this.root(n).pow(n).compareTo(maximumErrorAllowed()) == -1[/list]
это возможно? Если да, то как и что будет оценкой вычислительной сложности?
Подробнее здесь: https://stackoverflow.com/questions/340 ... -interface