Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Notacja wykładnicza

Ostatnio zmodyfikowano 2017-05-27 18:05
Autor Wiadomość
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.
C/C++
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.072972e-01
A tak moje wyjście

p(k,n)= 5.072972e-001
Teraz pytanie - gdzie tkwi błąd - przez ten drobny szczegół program sprawdzający wyrzuca błędy i nie mogę przesłać rozwiązania.
P-161596
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ąć.
P-161598
RazzorFlame
» 2017-05-27 18:05:41
C/C++
#include <iostream>
#include <sstream> // dla std::stringstream
#include <string> // dla std::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.
P-161671
« 1 »
  Strona 1 z 1