B. mała dokładność float/double/long double

0

Jakiś czas temu rozwiązałem proste zadanie (1 linijka obliczeń) na spoju w Pascalu, dostałem za nie 4/4 punkty. Dzisiaj postanowiłem sobie niektóre programy przepisać na C++. Żeby nie pokazywać rozwiązania ani treści zadania to pokażę trochę zmienione obliczenia:

kod w Pascalu:

program xxx;

const
  cSTALA = 1.123456789;

var
  r,d,c: Real;

begin
  ReadLn(r,d);
  c:=0.3*r*r+d*d;
  WriteLn(cSTALA*c);
end.

wynik: 4/4

i ten sam kod przepisany na C++:

#include <stdio.h>

int main()
{
  const float cSTALA = 1.123456789;
  float r,d,c;

  scanf("%f%f",&r,&d);
  c=0.3*r*r+d*d;
  printf("%f",cSTALA*c);
  return 0;
}

wynik: 1.6/4

po zmienieniu float na double wynik: 0.4/4,

po użyciu long double i cin/cout, wynik: 2.2/4

czy mógłbym prosić o wyjaśnienie mi tych anomalii?
jaki jest zatem odpowiednik real w C++?

0

To nie problem C++ a twojego lenistwa. Wiem że dokumentacja gryzie ale warto doczytać jak ustawiać ile cyfr znaczących ma program wypisywać.
np. tak:
printf("%.10f",cSTALA*c);
wypisze nam 10 cyfr po przecinku.

0

w zadaniu proszą o dokładność do co najmniej 2 miejsc po przecinku, podalem %.2f, rezultat: 1.6, wiem jak się formatuje wyjście, ale to nie tutaj leży problem. probowalem tez podawac wiecej miejsc po przecinku ale dokladnie taki sam rezultat

0

float daje maksymalnie wynik 1.6, doublem i coutem udało mi się uzyskać 4, ale musiałem użyć:
cout.precision

po dlugich meczarniach doszedlem czemu scanf/printf nie dziala. double wczytujemy jako %lf, a nie jako %f jak mi sie wydawalo.

dzieki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0