Notacja wykładnicza
Ostatnio zmodyfikowano 2017-05-27 18:05
wld1337 Temat założony przez niniejszego użytkownika |
Notacja wykładnicza » 2017-05-26 10:52:08 Witam, Problem pewnie wyda się dość trywialny, jednak potrzebuje pomocy - a nie znalazłem nigdzie rozwiązania. Tak wygląda fragment kodu, który odpowiedzialny jest za obliczenie. double wynik = 1.0; double k = 365.0 double n = 23.0 for( int i = 1; i < n; i++ ) { wynik *=( 1 - i / k ); } cout.setf( ios::scientific ); cout << "\np(k,n)= " << 1 - wynik << endl; return EXIT_SUCCESS;
Tak wyglada wzorzec p(k,n)= 5.072972 e-01A tak moje wyjście p(k,n)= 5.072972 e-001Teraz pytanie - gdzie tkwi błąd - przez ten drobny szczegół program sprawdzający wyrzuca błędy i nie mogę przesłać rozwiązania. |
|
wokub |
» 2017-05-26 11:07:50 https://stackoverflow.com/questions/31331723/how-to-control-the-number-of-exponent-digits-after-e-in-c-printf-e
Tutaj masz mniej więcej powiedziane co się dzieje. Znaczy to język C, ale da się ogarnąć. |
|
RazzorFlame |
» 2017-05-27 18:05:41 #include <iostream> #include <sstream> #include <string> using namespace std;
int main() { double wynik = 1.0; double k = 365.0; double n = 23.0; for( int i = 1; i < n; i++ ) { wynik *=( 1 - i / k ); } std::stringstream stream; stream.setf( ios::scientific ); stream << 1 - wynik; std::string str = stream.str(); auto index = str.find( "e-00" ); if( index != std::string::npos ) str.erase( str.begin() + index + 2 ); std::cout << "\np(k,n)= " << str << std::endl; return 0; }
Szybkie obejście problemu - zapisujesz wartość wartość do std::stringstream, potem do std::string. Wyszukujesz "e-00" i jeśli wyszukano to usuwasz jedno zero z początku. |
|
« 1 » |