为什么fab在另一个文件中使用时总是返回一个整数1而不是main

时间:2017-07-28 21:23:43

标签: c linux

在我的C代码中,它包含多个源文件和标题,我必须在我的一个函数中使用fabs。但每次我使用fabs时,它只返回一个等于1的整数。

我发现这里有一篇帖子谈论(其他网站上没有帖子),但答案对我来说并不对应。答案是将数学库与-lm联系起来,但我已经这样做了,包括数学,但我也做了......

所以我不明白为什么它会返回1并且它实际上让我失去了实习机会,因为它对整个代码来说都是一个重要的功能。

这是我的功能以及标题polynome.hmaths_jauge.h

中的包含
#include "maths_jauge.h"

double newtonMethode(double *poly, double valeur, int degre, double x) {
    double scalaire[1];
    scalaire[0] = -valeur;

    double *polyInter = malloc((degre + 1) * sizeof(double));
    additionPoly(degre, poly, 0, scalaire, polyInter);
    free(polyInter);

    int degreDerive = degre - 1;
    double *derive = malloc((degreDerive) * sizeof(double));
    derivePoly(degre, poly, derive);

    while (fabs(evalPoly(x, degre, poly) - valeur) > 0.001) {
        x -= evalPoly(x, degre, polyInter) / evalPoly(x, degreDerive, derive);
    }

    free(derive);
    return x;
}

加入maths_jauge.h

 #include <stdlib.h>
 #include <string.h>
 #include "polynome.h"

加入polynome.h

 #include <math.h>

这是我的makefile:

CC = gcc
CFLAGS = -Wall -g
LDFLAGS = -lm

all : main.o polynome.o maths_jauge.o
    $(CC) $^ -o main $(LDFLAGS)

main.o : main.c polynome.h
    $(CC) -c $< -o $@ $(CFLAGS)

polynome.o : polynome.c
    $(CC) -c $< -o $@ $(CFLAGS)

maths_jauge.o : maths_jauge.c
    $(CC) -c $< -o $@ $(CFLAGS)

.PHONY : clean mrproper

clean :
    rm -f *.o

mrproper : clean
    rm -f main

1 个答案:

答案 0 :(得分:0)

以同样的方式重写代码,所以我仍然不知道为什么会这样做。

感谢。

这是重新编写的代码,没有错误,人们突出显示:

double newtonMethode(double *poly, double valeur, int degre, double x) {
    double scalaire[1];
    scalaire[0] = -valeur;

    int i = 0;

    double *polyInter = malloc((degre + 1) * sizeof(double));
    additionPoly(degre, poly, 0, scalaire, polyInter);

    int degreDerive = degre - 1;
    double *derive = malloc((degreDerive + 1) * sizeof(double));
    derivePoly(degre, poly, derive);

    while (fabs(evalPoly(x, degre, poly) - valeur) > 0.000001) {
        x -= evalPoly(x, degre, polyInter) / evalPoly(x, degreDerive, derive);
    }

    free(polyInter);
    free(derive);
    return x;
}