Skocz do zawartości
Puchacz1

Problem Z Obliczeniem Działania

Rekomendowane odpowiedzi

To co Ty stworzyłeś jest po prostu karygodne. Podstawy matematyki i programowania się kłaniają. Nie pisze się tak:

float nwynik7 = 1/2 * (nliczba10 * nliczba11);
!!!

Piszesz albo tak:

float nwynik7 = (1/2) * (nliczba10 * nliczba11);
albo tak:

float nwynik7 = 1/(2 * (nliczba10 * nliczba11));
w zależności od efektu jaki chcesz osiągnąć. Edytowane przez Excray

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Excray: co jest karygodne, ten zapis wykona się normalnie. Oczywiście najlepiej byłoby tak:

float nwynik7 = nliczba10 * nliczba11 / 2;
Skoro tak twierdzisz...

ale zastanów się jeszcze nad tym.

 

EDIT

Nikt chyba nie zaczaił co jest źle w tym zapisie:

float nwynik7 = 1/2 * (nliczba10 * nliczba11);

 

Te działanie w tym zapisie wykona się tak:

float nwynik7 = 1/(2 * (nliczba10 * nliczba11));

 

a podejrzewam, że autorowi zależy na tym:

float nwynik7 = (1/2) * (nliczba10 * nliczba11);

 

Podstawowa zasada!!! Zawsze stosuj nawiasy w celu określenia priorytetu wykonania operacji matematycznych!

Edytowane przez Excray

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nikt chyba nie zaczaił co jest źle w tym zapisie:

float nwynik7 = 1/2 * (nliczba10 * nliczba11);

 

Te działanie w tym zapisie wykona się tak:

float nwynik7 = 1/(2 * (nliczba10 * nliczba11));

E tam. Operatory dzielenia i mnożenia mają taki sam priorytet. Najpierw wykona się dzielenie 1/2, w wyniku otrzymamy... 0 (tak tak, dzielenie całkowite), a następnie to zero przemnoży się przez wartość iloczynu zmiennych w nawiasie. I tak naprawdę to tu kryje się nie tyle błąd, co nieświadomość programisty. Wynik takiej operacji będzie zerem, typu takiego jak typ iloczynu zmiennych (czyli gdy jest float*float, to typ iloczynu też float, gdy float*int, to iloczyn jest float, int*int -> int). Potem nastąpi zrzutowanie tego zera na typ float (lub brak rzutowania, jeśli już jest ono floatem) i przypisanie. Gdyby zamiast 1/2 wpisać od razu wartość 0.5, wszystko będzie poprawnie, otrzymamy jakiś wynik zmiennoprzecinkowy, który będzie zerem tylko wtedy, gdy któraś z mnożonych zmiennych ma wartość 0. Edytowane przez arcuf_cofinuf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...