Несколько лет назад я написал компилятор Ansi C для пользовательского 16-разрядного процессора на основе стека моего друга, но так и не удосужился реализовать все типы данных. Теперь я хотел бы закончить работу, поэтому мне интересно, есть ли какие-нибудь математические библиотеки, которые я могу использовать, чтобы заполнить пробелы. Я могу работать с 16-битными целочисленными типами данных, поскольку они встроены в ЦП, и поэтому я выполняю для них все математические процедуры (т.е. +, -, *, /, %). Однако, поскольку его ЦП не обрабатывает числа с плавающей запятой, мне приходится самому реализовывать числа с плавающей запятой/двойники. Я также должен реализовать 8-битные и 32-битные типы данных (целые числа и числа с плавающей запятой/двойные числа). Я почти уверен, что это было сделано и переделано много раз, и, поскольку я не особенно жду воссоздания колеса, я был бы признателен, если бы кто-нибудь указал мне на библиотеку, которая может мне помочь.
Теперь я смотрел на GMP, но это кажется излишним (библиотека должна быть абсолютно огромной, не уверен, что мой собственный компилятор сможет с ней справиться), и он принимает числа в виде строк, которые были бы расточительны по очевидным причинам. Например :
mpz_set_str(x, "7612058254738945", 10);
mpz_set_str(y, "9263591128439081", 10);
mpz_mul(result, x, y);
Это кажется достаточно простым, мне нравится API... но я бы предпочел передать массив, а не строку. Например, если бы я хотел умножить два 32-битных длинных числа вместе, я хотел бы иметь возможность передать ему два массива размера два, где каждый массив содержит два 16-битных значения, которые фактически представляют 32-битное длинное и имеют библиотечное место вывод в выходной массив. Если мне нужна плавающая запятая, я также должен указать точность.
Может показаться, что я прошу слишком многого, но я прошу в надежде, что кто-то видел что-то подобное.
Спасибо заранее!