В вашем приложении вам понадобилось выполнять математику из строки, тогда библиотека matheval это то что вам нужно!

Выполняем математику из строки или калькулятор в 30 строк кода

1) Установить libmatheval. Valadoc с описанием функций

2) Создайте файл libmatheval.vapi

3) Скопируйте его в /usr/share/vala/vapi (здесь хранятся все vapi(то что подключается когда делаешь using * ))

Создам тестовую программу

Думаю проще уже некуда, проверим длинную арифметику.

А теперь простейший GUI калькулятор

Возможности

что умеет в формате: название (@название которое нужно использовать для вызова в коде)

Supported elementary functions are (names that should be used are given
in parenthesis): exponential (@code{exp}), logarithmic (@code{log}),
square root (@code{sqrt}), sine (@code{sin}), cosine (@code{cos}),
tangent (@code{tan}), cotangent (@code{cot}), secant (@code{sec}),
cosecant (@code{csc}), inverse sine (@code{asin}), inverse cosine
(@code{acos}), inverse tangent (@code{atan}), inverse cotangent
(@code{acot}), inverse secant (@code{asec}), inverse cosecant
(@code{acsc}), hyperbolic sine (@code{sinh}), cosine (@code{cosh}),
hyperbolic tangent (@code{tanh}), hyperbolic cotangent (@code{coth}),
hyperbolic secant (@code{sech}), hyperbolic cosecant (@code{csch}),
hyperbolic inverse sine (@code{asinh}), hyperbolic inverse cosine
(@code{acosh}), hyperbolic inverse tangent (@code{atanh}), hyperbolic
inverse cotangent (@code{acoth}), hyperbolic inverse secant
(@code{asech}), hyperbolic inverse cosecant (@code{acsch}), absolute
value (@code{abs}), Heaviside step function (@code{step}) with value 1
defined for x = 0, Dirac delta function with infinity (@code{delta}) and
not-a-number (@code{nandelta}) values defined for x = 0, and error
function (@code{erf}).

Supported constants are (names that should be used are given in
parenthesis): e (@code{e}), log2(e) (@code{log2e}), log10(e)
(@code{log10e}), ln(2) (@code{ln2}), ln(10) (@code{ln10}), pi
(@code{pi}), pi / 2 (@code{pi_2}), pi / 4 (@code{pi_4}), 1 / pi
(@code{1_pi}), 2 / pi (@code{2_pi}), 2 / sqrt(pi) (@code{2_sqrtpi}),
sqrt(2) (@code{sqrt}) and sqrt(1 / 2) (@code{sqrt1_2})

Также существует возможность использовать переменные, вот пример:

Для задания собственных имен нужно передать (массив имен, массив переменных)

PS заметил весьма интересные вещи, Vala автоматически приводит к значению в которое поместится переменная:

Вот это не работает

а вот тут запросто

Vala language