Почему pybind11 преобразует double в int? - PullRequest
1 голос
/ 01 августа 2020

Я создал файл .pyd:

#include <pybind11/pybind11.h>
#include <iostream>
#include <typeinfo>
namespace py = pybind11;
int add(int num) {
    float a = 1.0;  
    for (int i = 0; i <= num; i = i + 1) {
        a = (a + i)/a;
    }        
    std::cout << "dll is typing: " << a << '\n';
    std::cout << typeid(a).name() << std::endl;
    return a;
}
PYBIND11_MODULE(py_dll, m) {
    m.doc() = "pybind11 py_dll plugin"; // optional module docstring
    m.def("add", &add, "Add function", py::arg("num"));
}

Я вызываю его из python:

import py_dll
num = 500
a = py_dll.add(num)
print ('python is typing: ', a)

Он печатает:

введите описание изображения здесь

Почему di git стало int? Я говорю о 22. Я жду float 22.8722

1 Ответ

1 голос
/ 01 августа 2020

Эта функция

int add(int num)

принимает int в качестве параметра и возвращает int. «Проблема» не в pybind. Попробуйте это, чтобы увидеть:

int main() {
    auto x = add(42);
    std::cout << "return value: " << x << '\n';
    std::cout << typeid(x).name() << std::endl;
}

Если функция должна возвращать float, вы должны объявить, что она возвращает float:

float add(int num)
...