Potęgowanie modularne różne kompilatory różne wyniki

0

Witam wszystkich :) Mam problem z procedurką służącą do potęgowania modularnego. Oto kod:

long double modularExponentiation(long long int a, long long int b, long long int c){
	long double x = static_cast<long double>(1);
	long double y = static_cast<long double>(a);
	while(b!=0){
		if(b%static_cast<long long int>(2) == 0){
			b /= static_cast<long long int>(2);
			y = fmod(y*y,static_cast<long double>(c));
		}else{
			b--;
			x = fmod(x*y,static_cast<long double>(c));
		}
	}
	return x;
}

Procedurę wywołuję tak (od razu wypisuję wynik):

cout<<modularExponentiation(179,12,13)<<endl;
cout<<modularExponentiation(2,500000003,1000000007);

Dla obu wywołań funkcja powinna zwrócić wartość 1. Testowałem kod przy użyciu standardowego kompilatora z Microsoft Visual Studio 2005 Pro i gcc z Dev-C++ 4.9.9.2. W obu przypadkach kod kompiluje się i program działa. Niestety kod skompilowany visualem zwraca błędną wartość dla drugiego wywołania. Zamiast 1 zwraca mi:
9.35599*10^08
No i teraz pytanie - dlaczego tak jest?

Konfiguracja projektu to debug, ale próbowałem też release (i również błędny wynik). Standardowy projekt Win 32 Console Application. Procesor (jeżeli ma to znaczenie) Core 2 Duo 4500.

Pozdrawiam :)

PS: Tutaj link do opisu algorytmu:
http://myyn.org/m/article/algorithm-for-modular-exponentiation/

0

Dziękuję Ci bardzo :)
Udanej niedzieli życzę :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1