Также: вы не инициализировали темп.
Я думаю, что вам повезло и вы получили ненулевое значение. Это приведет вас в цикл, который запускается и правильно вычисляет все, пока temp не станет равным нулю. Так как v получает значение temp в нижней части цикла, когда temp равно нулю для условия завершения цикла, v тоже. Поэтому, когда вы делите на V, Blam.
Инициализируйте temp = 1, прежде чем начинать цикл, чтобы избежать Heisenbug в будущем. Поскольку переменная содержит мусор при размещении в стеке, высока вероятность того, что она будет отлична от нуля, но не обязательно, поэтому время от времени вы получаете неправильный ответ без предупреждения. Это будет королевская боль, чтобы найти.
Последнее: выбирайте разные имена для ваших переменных! Фортран такой пассивный. Если бы вы вызвали затем targetDenominator и targetNumerator, вы, вероятно, не написали бы
numerator /= targetNumerator;
denominator /= targetDenominator;
... или, по крайней мере, было бы яснее, что вы допустили ошибку.