Неправильное количество входных или выходных аргументов Scilab API

Программа выдает ошибку "Wrong number of input or output arguments: 3 inputs and 1 output expected.". Перепробовал уже много вариантов, но не понимаю в каких параметрах именно проблема. Подскажите, пожалуйста.

Код программы:

#include "api_scilab.h"
#include "Scierror.h"
#include "BOOL.h"
#include "localization.h"
#include <math.h>

static const char fname[] = "transcendental_solver";

double f(double x) {
    return sin(x) - pow(x, 2);
}

double bisection(double a, double b, double tol) {
    double c;
    while ((b - a) / 2.0 > tol) {
        c = (a + b) / 2.0;
        if (f(c) == 0.0)
            return c;
        else if (f(c) * f(a) < 0)
            b = c;
        else
            a = c;
    }
    return (a + b) / 2.0;
}

int transcendental_solver(scilabEnv env, int nin, scilabVar* in, int nopt, scilabOpt* opt, int nout, scilabVar* out) {
    double a, b, tol, root;

    /* Проверяем количество входных и выходных аргументов */
    if (nin != 3 || nout != 1) {
        Scierror(77, _("%s: Wrong number of input or output arguments: 3 inputs and 1 output expected.\n"), fname);
        return 1;
    }

    /* Проверяем типы входных аргументов */
    if (scilab_isDouble(env, in[0]) == 0 || scilab_isDouble(env, in[1]) == 0 || scilab_isDouble(env, in[2]) == 0) {
        Scierror(999, _("%s: Wrong type for input argument. Double expected.\n"), fname);
        return 1;
    }

    /* Получаем данные из входных аргументов */
    scilab_getDouble(env, in[0], &a);
    scilab_getDouble(env, in[1], &b);
    scilab_getDouble(env, in[2], &tol);

    /* Вычисляем корень методом бисекции */
    root = bisection(a, b, tol);

    /* Создаем выходной аргумент и копируем результат */
    out[0] = scilab_createDoubleMatrix2d(env, 1, 1, 0);
    double* rootPtr = NULL;
    scilab_getDoubleArray(env, out[0], &rootPtr);
    rootPtr[0] = root;

    return 0;
}

Компиляция:

files = ["transcendental_solver.c"]; // Список ваших исходных файлов
ilib_build('build_lib', ['transcendental_solver', 'transcendental_solver'], files, []);
exec loader.sce;



// Задаем начальные значения для метода бисекции
a = 0;
b = 2;
tolerance = 1e-6;

// Вызываем функцию для решения трансцендентного уравнения
root = transcendental_solver(a, b, tolerance);

// Выводим результат
disp(root);

Вывод Scilab:

Запуск программы:
  загрузка исходного окружения

-->files = ["transcendental_solver.c"]; // Список ваших исходных файлов

-->ilib_build('build_lib', ['transcendental_solver', 'transcendental_solver'], files, []);
   Формируется файл шлюза
   Формируется файл загрузки
   Формируется Makefile
   ilib_gen_Make: Копирование файлов компиляции (Makefile*, libtool...) в TMPDIR
   ilib_gen_Make: Копирование libbuild_lib.cpp в TMPDIR
   ilib_gen_Make: Копирование libbuild_lib.h в TMPDIR
   ilib_gen_Make: Копирование libbuild_lib.hxx в TMPDIR
   ilib_gen_Make: Копирование transcendental_solver.c в TMPDIR
   ilib_gen_Make: Изменение Makefile в TMPDIR.
   Выполняется Makefile
   Формируется файл очистки

-->exec loader.sce;
Разделяемый архив загружен.
Компоновка завершена.

-->a = 0;

-->b = 0;

-->tolerance = 1e-6;

-->root = transcendental_solver(a, b, tolerance);

transcendental_solver: Wrong number of input or output arguments: 3 inputs and 1 output expected.

Ответы (0 шт):