2013-05-28 4 views
2

Я пытаюсь создать программу, которая находит корень уравнения. Все, что касается моей программы, отлично работает, за исключением самого уравнения: оно возвращает неверные значения (1, бесконечность, 0, ...).Функция не возвращает правильное значение в C

Это функция Я оценка:

double f(x) { 
    return exp(-x)-sin(M_PI*x/2.); 
} 

Например, F (0,3) должно быть 0,287, но он возвращает 1.000. Странно, я попробовал тот же самый код на другом компьютере некоторое время назад, и все получилось просто отлично.

+2

Что такое подпись функции? 'double f (x)' плохо сформирован. – Elazar

+1

@ Элазар: С C90 он не плохо сформировался; это определение старого стиля (pre-ANSI) с типом 'x' по умолчанию' int'. Начиная с C99, «неявное правило« int »было отброшено, и это нарушение ограничения, требующее диагностики. –

+0

@KeithThompson спасибо. вы можете видеть из моего ответа, что я знаю о стандарте-int-int, или могли бы догадаться, что, поскольку * все * по умолчанию используется 'int', по какой-то причине ... Я предполагаю, что' f (x) {} 'is хорошо сформированная функция, которая получает 'int' и возвращает' int' тоже: P. Я буду рад узнать, что думали K & R. – Elazar

ответ

7
double f(x) { 
    return exp(-x)-sin(M_PI*x/2.); 
} 

Тип для й не объявлен, поэтому он по умолчанию int.

Проходите .3, так что принуждать int и стать 0.

exp(-0)-sin(M_PI*0/2.) == exp(0)-sin(0) == 1.0-0 == 1.0 

Пожалуйста, найти себе лучший компилятор, и включить предупреждения.

0

Возможно, вы должны указать свою переменную. Обычно это происходит с делениями.

0
double f(double x) { 
...... 
} 
+0

Вот и все. Теперь я чувствую себя глупо. :( –

+0

Nah, не волнуйтесь. Случается со всеми. –

0
#include <stdio.h> 
#include <math.h> 

double f(double x) { 
    return exp(-x)-sin(M_PI*x/2.); 
} 

int main(void){ 
    printf(".3 = %f",f(.3)); 
    getchar(); 
    return 0; 
} 

результаты: »= 0.286828' 0,3

Смежные вопросы