Algoritmo iterativo de Fibonacci que me da un resultado incorrecto después de fib (47)

Estoy usando el algoritmo iterativo fib que he copiado a continuación. Encontré este algoritmo en el código de Rosetta y me da la respuesta correcta hasta fib (46). Después de eso, los valores están equivocados. ¿Alguien sabe por qué este es el caso?

long long fibb(int n)
{
    int fnow = 0, fnext = 1, tempf;
    while(--n > 0) {
        tempf = fnow + fnext;
        fnow = fnext;
        fnext = tempf;
    }
    return fnext;   
}

Salida:

Fib(46) = 1836311903            <---- Correct
Fib(47) = 18446744092385799393   <---- Wrong (Correct Answer is: 2971215073)

Respuestas a la pregunta(3)

Su respuesta a la pregunta