Precyzja Float i double

solek
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 14 lut 2008, o 18:57
Płeć: Mężczyzna
Lokalizacja: Zamosc
Podziękował: 4 razy

Precyzja Float i double

Post autor: solek »

Na metody obliczeniowe mam takie zadanko mniej wiecej:

Napisac program w c/c++ ktory odkryje jaka mamy precyzję float i double (...)

Nie rozumiem słowa "jaka" poniewaz precyzja moze byc pojedyncza i podwojna wiec nie wiem co mam obliczyc... jakies pomysly ?? ;>
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Precyzja Float i double

Post autor: smiechowiec »

Trudno czasem powiedzieć co autor miał na myśli pisząc precyzja.
Jeśli rozumiemy przez precyzję dokładność liczby, wtedy pomocna jest pseudofunkcja sizeof(float) i sizeof(double)

W celu znalezienia najmniejszej liczby, jaką da się przedstawić za pomocą float czy double można posłużyć się prezentowanym już kiedyś kodem

Kod: Zaznacz cały

#include <stdio.h>
float f0 = 1.0, flast;
double d0 = 1.0, dlast;

int main() {
  do  {
      flast = f0;
      f0 = f0 / 2;
  } while( f0 > 0);
  printf("Najmniejsza liczba typu float wynosi %g
", flast);
  do  {
      dlast = d0;
      d0 = d0 / 2;
  } while( d0 > 0);
  printf("Najmniejsza liczba typu double wynosi %g
", dlast);
  return 0;
} 
U mnie odpowiedź wygląda tak

Kod: Zaznacz cały

Najmniejsza liczba typu float wynosi 1.4013e-045
Najmniejsza liczba typu double wynosi 4.94066e-324
i większej precyzji (dokładności) z tych liczb się raczej nie wyciśnie.
Xitami

Precyzja Float i double

Post autor: Xitami »

smiechowiec pisze:U mnie odpowiedź wygląda tak

Kod: Zaznacz cały

Najmniejsza liczba typu float wynosi 1.4013e-045
Najmniejsza liczba typu double wynosi 4.94066e-324
i większej precyzji (dokładności) z tych liczb się raczej nie wyciśnie.
5 cyfr dla float oraz 6 dla double? Oj więcej!
To co jest po "E" mówi o zakresie, a nie o precyzji.

A może tak:

Kod: Zaznacz cały

x=MAGICZNA LICZBA MNIEJSZA OD 1; 
while (frac(x) != 0.0)
    x*=10;
x=floor(ln(X)/ln(10)+1);
i=x;
printf("%d", i);
Tylko jak wybrać MAGICZNĄ LCZBĘ?
1/2+1/4+1/8+1/16+..... aż liczna przestanie rosnąć lub nie zmieni się w jedynkę, przy okazji wyjdzie ile bitów siedzi w liczbie.
ODPOWIEDZ