1 / 8
Mar 2016

Witam. Mam problem z zadaniem "Równanie liniowe". Mianowicie przy wyniku pojawia mi się "dodatek" nan oraz inf. Wiem co oznaczają te skróty ale nie wiem dlaczego się pojawiają smile Proszę o poradę jak "to" usunąć z couta smile

#include <iostream>
#include <iomanip>

double a, b, c;

using namespace std;

int main()
{
    cin>>a>>b>>c;
    if((c-b)==0)
        cout<<"NWR";
    if(((c-b)!=0) && a==0)
        cout<<"BR";
    else
        cout.setf(ios::fixed);
        cout<<fixed<<setprecision(2)<<(c-b)/a;
    return 0;
}
  • created

    Mar '16
  • last reply

    Mar '16
  • 7

    replies

  • 1.5k

    views

  • 2

    users

  • 1

    link

Dzięki za pomoc. Faktycznie "zapomnaiłem" przeszukać forum confounded
Poprawiłem wg Twoich uwag i wyniki mam okej jednak SPOJ wyrzuca mi błędną odpowiedz frowning

#include  <iostream>
    #include <iomanip>
    
    double a, b, c;
    
    using namespace std;
    
    int main()
    {
        cin>>a>>b>>c;
        if((c-b)==0)
            cout<<"NWR";
        else if(((c-b)!=0) && a==0)
            cout<<"BR";
        else{
            cout.setf(ios::fixed);
            cout<<fixed<<setprecision(2)<<(c-b)/a;
        }
        return 0;
    }

Nie wiem dlaczego, ale przy wysyłaniu wybierz C++14.

Podejrzewam, że winowajcą tutaj jest porównywanie liczb zmiennoprzecinkowych, także wyniku działania na liczbach tego typu, bezpośrednio z zerem [== 0] zamiast z wartością przybliżoną +- małym błędem epsilon [>-epsilon && <+epsilon].

Niewiadomą jest dlaczego po skompilowaniu pod jednym kompilatorem wynik jest ok, a pod innym nie. Może to nie do końca "wina" samych, różnych, kompilatorów, ale np różnego ustawienia opcji [poziomu] optymalizacji przy ich uruchamianiu przez system SPOJ. Trzebaby o to zapytać adminów: contact@spoj.com

Dzięki, też się zastanawiałem czemu na jednym działa a na drugim nie. Chętnie napiszę do administratorów ( pl czy ang?).

Administratorzy chyba są ci sami, a adres teraz już raczej bez pl.