2015-09-04 4 views
-3

Вот часть моего кода:Различные результаты той же функции с теми же аргументами

double interf1 = interf(ppp, numberOfPoints); 
printf("interf (%e,%e)\n", interf(ppp,numberOfPoints), interf1); 

Проблема заключается в том, что, когда я печатаю значения interf1 и interf(ppp, numberOfPoints) я получаю разные результаты.

Есть ли какие-либо объяснения для этого?

+6

Что такое декларация 'interf'? – Barmar

+2

Что такое выход? – OldProgrammer

+3

«Вот часть моего кода:« как насчет предоставления полного примера, демонстрирующего поведение. – weston

ответ

0

Я бы сказал, да, для этого есть объяснение (но в этом вопросе не хватает соответствующей информации для того, чтобы кто-нибудь действительно прибил ее).

Метод interf имеет некоторое внутреннее изменяемое состояние или зависимость от других данных, которые изменяются между вызовами.

В качестве альтернативы, возможно изменение значений ppp или numberOfPoints, но это гораздо менее вероятно. Это подразумевало бы многопоточность, учитывая контекст здесь.

2

Это, скорее всего, симптом side effect.

Это простой пример реализации interf, который имеет побочный эффект:

int z; 

double interf(int p, int n) { 
    return z++; 
} 

Каждый вызов, даже с одинаковыми значениями возвращает различный результат.

Другие примеры побочных эффектов включают чтение из потока (например, файла или сетевого интерфейса), побочным эффектом является перемещение позиции в файле или использование данных из сетевого буфера.

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

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