Данная библиотека реализует хранение и арифметику над 64-битными числами при помощи штатной 32-битной арифметики языка Pawn.
ВНИМАНИЕ! Библиотека предназначена для работы с фанатским компилятором Pawn.
💳 Такие числа могут быть полезными при реализации внутриигровых систем банков, казино, и т.д., так как игрок может заиметь достаточное кол-во денег, чтобы ощутить максимум, накладываемый 32-битным знаковым представлением чисел (максимум всего 2 147 483 647).
Хранение же значения баланса при помощи 64-битного беззнакового представления позволяет "поднять планку" максимума ((2^64)-1 = 18 446 744 073 709 551 615)
🧰 При этом, библиотека является "header-only", т.е. встраивается в код при помощи директивы #include
и не требует подгрузки плагинов.
Следующая программа преобразовывает строки в два числа, складывает их и показывает результат в консоли:
#include <uint64>
main()
{
new number1[uint64]; // создание переменной для числа (выделение памяти под число)
uint64fromstr(number1, "550000000"); // преобразование из строки
new number2[uint64]; // создание переменной для числа (выделение памяти под число)
uint64fromstr(number2, "48255024242"); // преобразование из строки
uint64add(number1, number2); // сложение чисел, результат записывается в первую переменную
new string[50];
uint64tostr(string, sizeof(string), number1); // преобразование в строку
print(string);
}⏱️ Самым главным недостатком этой реализации является скорость вычислений.
Несмотря на оптимизацию операций (например, некоторые функции были переписаны на языке AMX ассемблера), время выполнения многих операций в несколько раз больше аналогичных штатных операций над 32-битными числами.
🚨 Этот недостаток нивелируется применением этих чисел. Рекомендуется их использовать только в необходимых местах (см. Преимущества). В этом случае, скорость операций не станет "камнем преткновения".
- There is English version of this README