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

przybliżanie bardzo małych liczb zapisanych w postaci naukowej

Ostatnio zmodyfikowano 2012-12-23 14:03
Autor Wiadomość
Savail
Temat założony przez niniejszego użytkownika
przybliżanie bardzo małych liczb zapisanych w postaci naukowej
» 2012-12-23 12:15:45
Hej,
Mam zapisane pewne bardzo duże liczby w zmiennych typu
unsigned long long int
 i w pewnym momencie programu muszę od 1.0 odjąć wynik ich dzielenia. Z całego działania wychodzi liczba zapisana w postaci naukowej, którą muszę podać jako parametr do funkcji, która przyjmuje float w zakresie od 0 do 1. Jednak wydaje mi się, że będąc w postaci naukowej liczba jest źle odczytywana przez program gdyż ta pewna funkcja nie daje pożądanego rezultatu...
Zna ktoś jakiś dobry sposób aby liczbę float w postaci naukowej przekonwertować do zwykłego zapisu?

Poniżej program, który pokazuje problem. Wyniki wyświetlane są w postaci naukowej, a ja chciałbym je zapisać w zwykłej postaci.(nie chodzi tylko o wyświetlenie w zwykłej postaci ale o przybliżenie wartości)
C/C++
#include <iostream>
#include <conio.h>

using namespace std;
int main()
{
    unsigned long long int X = 0xFFFFFFFFFFFFFFFF;
    unsigned long long int Y = X;
    while( 1 )
    {
        X -= 56465;
        float wynik = 1.0f -( float ) X /( float ) Y;
        cout << wynik << endl;
        getch();
    }
    getch();
}
P-71715
DejaVu
» 2012-12-23 13:30:31
http://cpp0x.pl/kursy/Kurs-C++/Obsluga-strumienia-cout/323

C/C++
std::cout.setf( std::ios::fixed );
P-71722
Savail
Temat założony przez niniejszego użytkownika
» 2012-12-23 13:35:17
Chodzi mi o to, aby wartość zmiennej wynik przybliżyć do tego stopnia aby wyszła z postaci naukowej(nie chodzi o samo wyświetlenie, inaczej bym nie pytał na forum : P), aby bez tych tricków cout domyślnie wyświetlił wynik w postaci zwykłej a nie naukowej.
P-71723
DejaVu
» 2012-12-23 13:48:58
To przeczytaj w dokumentacji 'kiedy' wartość jest wyświetlana jako postać naukowa, a kiedy normalna. Później zaokrąglij sobie liczbę do danego miejsca po przecinku, np. mnożąc ją przez 1000, później rzutuj na (int), a jeszcze później podziel przez 1000.0f i zapisz wynik do float-a. Faktem jednak jest, że i tak nie uzyskasz liczby z dokładnością do 3 miejsc po przecinku powyższym zapisem, ponieważ liczby zmiennoprzecinkowe są zapisane w pamięci jako suma potęg liczby 2.

/edit:
Jeżeli interesuje Ciebie jak zapisywana jest w pamięci komputera liczba zmiennoprzecinkowa to polecam poczytać kurs Asemblera.

http://monika.univ.gda.pl/~matrf/studenci2/ak_2004_2005 /lab12/koproc.htm
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
P-71724
Savail
Temat założony przez niniejszego użytkownika
» 2012-12-23 14:03:48
eh... Mój błąd okazał się leżeć gdzie indziej a od wczoraj nad tym siedziałem. Mimo wszystko, ten sposób powyżej też zadziałał. Szkoda, że o nim nie pamiętałem :P. Dzięki wielkie za pomoc i za artykuły!
P-71725
« 1 »
  Strona 1 z 1