Определение алгоритма квадратного корня, действующего на пользовательский числовой интерфейсJAVA

Программисты JAVA общаются здесь
Anonymous
Определение алгоритма квадратного корня, действующего на пользовательский числовой интерфейс

Сообщение Anonymous »

Вопрос заключается в стратегическом подходе к проблеме определения алгоритма квадратного корня на общем численном интерфейсе. Я знаю о существовании алгоритмов, решающих проблему с различными условиями. Меня интересует алгоритмы, что: < /p>
  • решает проблему с использованием только выбранных функций; < /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);
неизвестно, что C представляет собой целое число или плавающее значение, , а это не должно быть актуально в следующем обсуждении .

Использование только этих методов может создать статический код 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))
подразумевает x.root (n) .equals (y) ;
[*]

Код: Выделить всё

C root(int n);
на самом деле реализовано с использованием только базовых функций и методов, созданных из базовых функций;
[*] Интерфейс все еще может быть применен к любым типам чисел, включая, но не ограничивая как на целых числах, так и в плавающих точках.
[*]

Код: Выделить всё

this.root(n).pow(n).compareTo(maximumErrorAllowed()) == -1
для всего этого такого, что это.root (n)! = null , то есть любое возможное приближение имеет ошибку, меньшую, чем c MaximerRororAllowed () ;
[/list]

это возможно? Если да, то как и что будет оценкой вычислительной сложности?

Подробнее здесь: https://stackoverflow.com/questions/340 ... -interface

Вернуться в «JAVA»