Я реализую расширенный алгоритм Евклида в Maple для произвольных областей.
В основном цикле программы у меня есть этот код:
# Loop
while r_1 <> 0 do;
print("All is fine before the Quo");
print(r_0); print(r_1);
q := ED[Quo](r_0, r_1);
print("All is fine after the Quo");
r_aux := r_0 - q * r_1;
r_0 := r_1; r_1 := r_aux;
s_aux := s_0 - q * s_1;
s_0 := s_1; s_1 := s_aux;
t_aux := t_0 - q * t_1;
t_0 := t_1; t_1 := t_aux;
od;
Где ED - объект Домена, переданный в качестве параметра функции.
Когда я вызываю функцию с определенными аргументами, она проходит один раз через цикл, а затем во второй итерации вылетает между вторым и третьим оператором печати.
Конкретно, он производит такой вывод:
"All is fine before the Quo"
-87 + 47 _i
-90 + 43 _i
"All is fine after the Quo"
"All is fine before the Quo"
-90 + 43 _i
3 + 4 _i
Error, (in E[Domains:-Rem]) cannot determine if this expression is true or false: 0 <= -90*`domains/Gaussian/badge0`(-87, 47)-43*`domains/Gaussian/badge0`(1, 0)*`domains/Gaussian/badge0`(-90, 43)
Из этого следует сделать вывод, что вызов Gaussian(Z)[Quo]
для аргументов -90 + 43 _i
и 3 + 4 _i
должен вызвать эту ошибку, верно?
Хорошо, подумайте еще раз, потому что, когда я пытаюсь воспроизвести это из ноутбука, он решает прекратить сбой. Вызов:
GI:=Gaussians(Z): a := GI[Input](-90+43*I); b := GI[Input](3+4*I); GI[Quo](a, b);
Производит вывод:
a := -90 + 43 _i
b := 3 + 4 _i
-4 + 20 _i
Что происходит? Почему происходит сбой внутри функции, но не в рабочей книге?