Вызов функции Quo из гауссовской (Z) области приводит к ошибке, которую я не могу полностью воспроизвести - PullRequest
0 голосов
/ 12 ноября 2018

Я реализую расширенный алгоритм Евклида в 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

Что происходит? Почему происходит сбой внутри функции, но не в рабочей книге?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...