Если я хочу вычислить a^b mod c, тогда есть эффективный способ сделать это, не вычисляя a^b в полном объеме.Функция Modulo Power в J
Однако при программировании, если я пишу f g x, тогда g (x) вычисляется независимо от f.
J обеспечивает возможность компоновки f и g в особых случаях, а модульная функция питания - одна из них. Например, следующее выполняется очень быстро.
1000&| @ (2&^) 10000000x
Это происходит потому, что «наверху» совместно «@» указывает язык сочинить функции, если это возможно. Если я удалю его, это будет невыносимо медленным.
Если, однако, я хочу работать с x^x, то^~ больше не работает, и я получаю предельные ошибки для больших значений. Однако привязка этих больших ценностей работает.
Так
999&| @ (100333454&^) 100333454x
выполняет красиво и быстро, но
999&| @ ^~ 100333454x
дает мне предельную ошибку - ОРЗ является слишком большим.
Я правильно понял, что в этом случае J не использует эффективный алгоритм с модулем мощности?