Cálculo de rolamentos entre dois CLLocationCoordinate2Ds

Problema muito "simples": considerando dois CLLocationCoordinate2Ds, como posso obter o rolamento (em radianos) do primeiro para o segundo? Eu fiz muita pesquisa e estudo sobre isso, tanto o problema geral quanto o Objective-C / Cocoa Touch / iOS especificamente.

Aqui está minha implementação:

- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
    float fLat = fromLoc.latitude;
    float fLng = fromLoc.longitude;
    float tLat = toLoc.latitude;
    float tLng = toLoc.longitude;

    return atan2(sin(fLng-tLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng));         
}

No entanto, esse método não está retornando resultados consistentes para mim. Se o rolamento estiver próximo ao norte ou sul, parece bom, no entanto, qualquer outra direção parece retornar dados inconsistentes, por exemplo:

De 50.405018, 8.437500

Para 51.339802, 12.403340

Meu método retorna: 5.918441 radianos

Devem ser 1.18660576 radianos

(Vejohttp://www.movable-type.co.uk/scripts/latlong.html ehttp://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)

Eu verifiquei duas e três vezes a fórmula está correta. Também verifiquei vários valores como o exemplo acima, alguns corretos, outros errados. Eu brinquei com vários módulos ou limites do valor de retorno, também sem sorte.

Alguma ideia? Existe algum problema com o meu código? Talvez eu tenha entendido algo errado sobre como as funções matemáticas funcionam.

questionAnswers(4)

yourAnswerToTheQuestion