easy.math.qsp v. 2.4.0
Логические операции
#add#
Функция выполняет побайтовое сложение двух чисел, с переполнением. Складывать можно два числа абсолютно любой длины (если используются числовые значения для аргументов, они должны укладываться в пределы от 0 до 2147483647).
$args[
- первое число (сколько угодно длинное), можно 0
] args[
(ограниченное значение).
0
]$args[
- второе число (сколько угодно длинное), можно 1
] args[
(ограниченное значение).
1
]
Любой посторонний символ интерпретируется, как 0
(нуль). Т.е. суммируются только целые положительные числа.
Использует функцию #zero#
.
Суммирует два целых числа любой длины по следующим правилам:
- Каждое число представляет собой запись из цифр. Цифры условно назовём байтами, само число - словом.
-
Количество байтов в одном слове может быть больше, чем в другом. В таком случае слово с меньшим количеством байтов приводится к длине слова с большим количеством байтов.
Например 998765
и 273
273 приводится к длине 998765 добавлением недостающих байтов.
273 -> 000273 -
Байты нумеруются справа налево! По разрядам, начиная с нулевого.
слово 998765
номер байта 543210 - Слова суммируются побайтово (поразрядно), начиная с нулевого. Итог вычислений записывается в слово Сумма.
-
Если при суммировании байтов на одном разряде происходит переполнение, т.е. число оказывается больше одного разряда, лишний разряд переносится на следующий байт.
Пример:
998765
+
000273
------
999038 : /5+3=8/6+7=13/2+7+1=10/8+1+0=9/9+0=9/9+0=9/
999038 : / 8/ 3/ 0/ 9/ 9/ 9/ -
В случае если переполнение происходит на суммировании последних байтов, лишний разряд переносится на нулевой байт Суммы.
Пример:
998765
+
001273
------
1000038 - слово Сумма
+1
------
000039 - итог. Слово Сумма. Будет записано в $result - Результатом работы функции является слово Сумма. Это текстовая запись числа без потери разрядов. Т.е. если были два числа: из пяти символов и из двух символов, - результат обязательно будет состоять из пяти символов.
Результат работы функции:
$func('#add#','9987Y5','-273')='998978'
$func('#add#','999999','6273')='006273'
$func('#add#','998705','5773')='004479'
#dev#
$args[
- уменьшаемое (любой длины), можно 0
] args[
(ограниченное значение).
0
]$args[
- вычитаемое (любой длины), можно 1
] args[
(ограниченное значение).
1
]
Результат - текстовое значение (слово Сумма) без потери разрядов.
Использует функцию #zero#
.
Побайтовое вычитание. Вычитает из одного числа другое. Оба числа приводятся к одной длине по аналогии с #add#
.
Далее происходит поразрядное вычитание. Причём если в результате получается отрицательное число в байт записывается 10+число, в следующий разряд переносится -1
Пример:
-
099271
------
981492
Если отрицательное число получается на последнем байте последний байт вычисляется по общим правилам, а из нулевого байта Суммы вычитается 1.
Результат работы функции:
$func('#dev#','9987Y5','-273')='998432'
$func('#dev#','999999','6273')='993726'
$func('#dev#','998705','5773')='992932'
#rtp#
Процедура меняет местами значение двух переменных.
$args[
- имя первой переменной
0
]$args[
- имя второй переменной
1
]
Пример использования:
b=9
gosub '#rtp#','a','b'
a
b
$c[0]='citated'
$d[19]='legated'
gosub '#rtp#','$c[0]','$d[19]'
$c[0]
$d[19]
Результат работы функции:
6
legated
citated