Octave/Matlab как бы не СКА, а Maple — СКА. В Octave 4 нет в поставке класса рациональные, но для символьных
>> mod(sym('2+1/2'), sym('1/3'))
ans = (sym) 1/6
Тогда как в Maple 15 обещают в справке только для целых модулей:
Код:
> (2+1/2) mod 1/2;
Error, invalid input: modp received 1/2, which is not valid for its 2nd argument, m
> `mod`(2+1/2, 1/2);
Error, invalid input: modp received 1/2, which is not valid for its 2nd argument, m
Если значения входных аргументов иррациональные, то возвращаемые результаты в Octave 4, за исключением очень простых случаев, несколько неожиданны
Код:
>> mod(sym('(2+1/2)*pi'), sym('pi'))
ans = (sym)
pi
--
2
>> mod(sym('2*pi'), sym('pi'))
ans = (sym) 0
>> mod(sym('3*cos(3)'), sym('sin(2)'))
ans = (sym) 3*cos(3) + 4*sin(2)
[Octave, грубо говоря, использует SymPy для символьных вычислений.] На удивление в некоторых вырожденных случаях в Maple работает для иррациональных модулей.
Код:
> 2*Pi mod Pi;
0
> # but!
> (2+1/2)*Pi mod Pi;
modp(5/2*Pi,Pi)
[В Мaple удобно, если не получилось вычислить, получить исходное выражение.]
В общем, нужны ли хоть какие-то случаи с иррациональными вопрос технический, при программировании что-то может быть полезным.