Rzutowanie do int po potęgowaniu pow(a,b)
Ostatnio zmodyfikowano 2016-09-17 21:40
Shkekled Temat założony przez niniejszego użytkownika |
Rzutowanie do int po potęgowaniu pow(a,b) » 2016-09-17 12:48:40 #include <iostream> #include <cmath>
int main() { int a; int b; std::cin >> a; std::cin >> b; std::cout << "pow(a,b)=" << std::pow( a, b ) << '\n'; }
Jak wpiszę w a=10 i w b=10, to wyskakuje mi: 1e+010? Jak to naprawić? |
|
mateczek |
» 2016-09-17 13:18:43 #include <iostream> #include <cmath>
int main() { int a; int b; std::cin >> a; std::cin >> b; std::cout << std::fixed << "pow(a,b)=" << std::pow( a, b ) << '\n'; int c = pow( a, b ); std::cout << c << '\n'; }
|
|
kistel66 |
» 2016-09-17 13:39:19 Albo dodać #include <iomanip> a przed wyświetleniem wiadomości: cout << setprecision( x ) W miejsce x wpisujesz ile miejsc po przecinku chcesz mieć |
|
karambaHZP |
» 2016-09-17 13:51:33 Albo dodać #include <iomanip> a przed wyświetleniem wiadomości: cout << setprecision( x ) W miejsce x wpisujesz ile miejsc po przecinku chcesz mieć |
Sprawdziłeś jaki będzie wynik czegoś takiego? #include <iostream> #include <cmath> #include <iomanip> using namespace std;
int main() { cout << setprecision( 2 ) << pow( 10, 10 ) << '\n'; } fixed i tak jest potrzebne. |
|
Shkekled Temat założony przez niniejszego użytkownika |
» 2016-09-17 14:35:47 Mateczek napisał błędny kod. Nadal po tym, źle liczy. |
|
mateczek |
» 2016-09-17 16:09:44 Co konkretnie źle liczy ?? jak przekraczasz zakres zmiennych to jest normalne że źle liczy. Jak wielkie liczby chcesz potęgować ?? long long ci wystarcza?? #include <iostream> #include<cmath> using namespace std; unsigned long long pow_int( int podst, int wykl ) { unsigned long long wynik = 1; for( int i = 0; i < wykl; i++ ) { wynik *= podst; } return wynik; } int main() { cout << pow_int( 2, 3 ) << endl; cout << fixed << pow( 2, 3 ) << endl; long long c = pow( 2, 3 ); cout << c << endl; } |
|
Piastlis |
» 2016-09-17 21:15:05 Co tu źle działa? 10^10 to dokładnie 1e10... |
|
mateczek |
» 2016-09-17 21:40:22 pewnie mu się liczby w zakresy nie mieszczą i dlatego double fajnie policzy ale jak przekroczy zakres to mu mantysę obetnie przybliży do wymaganej długości. Wystarczy zobaczyć ten program #include <iostream> using namespace std;
int main() { double wynik = 1; unsigned long long wynik2 = 1; for( int i = 0; i < 19; i++ ) { wynik *= 11; wynik2 *= 11; if( i == 15 ) cout << "tu sie posypal zakres double " << endl; if( i == 18 ) cout << "tu sie posypal zakres unsignded long long - brak jedynki na koncu wyniku " << endl; cout << fixed << wynik << "\n" << wynik2 << "\n" << endl; } }
i o ile long long wysiada po i =18 definitywnie o tyle double można używać dalej jak się zaakceptuje przybliżenia wyniku |
|
« 1 » |