Я не понимаю, почему я получаю «inf» при запуске этого кода. Это цель C Я включаю .m файл рассматриваемого метода - PullRequest
0 голосов
/ 28 января 2010
-(void) reduce
{
 int u = numerator;
 int v = denominator;
 int temp;

 while (temp !=0) {

  temp = u % v;
  u = v;
  v = temp;
 }

 numerator /=u;
 denominator /=v;
}

Ответы [ 2 ]

3 голосов
/ 28 января 2010

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

denominator /= u;
0 голосов
/ 28 января 2010

Также: вы не инициализировали темп.

Я думаю, что вам повезло и вы получили ненулевое значение. Это приведет вас в цикл, который запускается и правильно вычисляет все, пока temp не станет равным нулю. Так как v получает значение temp в нижней части цикла, когда temp равно нулю для условия завершения цикла, v тоже. Поэтому, когда вы делите на V, Blam.

Инициализируйте temp = 1, прежде чем начинать цикл, чтобы избежать Heisenbug в будущем. Поскольку переменная содержит мусор при размещении в стеке, высока вероятность того, что она будет отлична от нуля, но не обязательно, поэтому время от времени вы получаете неправильный ответ без предупреждения. Это будет королевская боль, чтобы найти.

Последнее: выбирайте разные имена для ваших переменных! Фортран такой пассивный. Если бы вы вызвали затем targetDenominator и targetNumerator, вы, вероятно, не написали бы

numerator /= targetNumerator;
denominator /= targetDenominator;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...