为什么函数从.so库返回随机值?

问题描述 投票:-2回答:1

我在C上写了一个小库来计算函数。这是这个库的片段:

// Расчёт функции
struct function_value function(double x) {
        struct function_value result;
        result.argument = x;
        for (int i=1; 1; i++) {
                double element = pow(-1.0,i+1) * (pow(VAR*x,i+(i-1)) / fact(i+(i-1)));
                if (fabs(element) < EPSILON) break; 
                else result.value += element;
        }
        return result;
}

并将此库绑定到小python程序:

from ctypes import *

libc = CDLL("../gmath/lib/gmathlib.so")


class FunctionValue(Structure):
    _fields_ = [("argument", c_double), ("value", c_double)]


arg = c_double(-2.0)
libc.function.restype = FunctionValue
print(libc.function(arg).value)
i = -2.0
while i <= 2.0:
    i += 0.25
    result = libc.function(c_double(i)).value
    print(result)

但程序有时会输出正确的函数值(图像1),有时会显示一个随机数(图像2)。为什么会这样?

enter image description here

enter image description here

python c
1个回答
6
投票

你从未初始化result.value,所以result.value += element;正在添加一个未初始化的变量。

struct function_value function(double x) {
    struct function_value result;
    result.argument = x;
    result.value = 0;
    for (int i=1; 1; i++) {
        double element = pow(-1.0,i+1) * (pow(VAR*x,i+(i-1)) / fact(i+(i-1)));
        if (fabs(element) < EPSILON) break; 
        else result.value += element;
    }
    return result;
}
© www.soinside.com 2019 - 2024. All rights reserved.