przybliżanie bardzo małych liczb zapisanych w postaci naukowej
Ostatnio zmodyfikowano 2012-12-23 14:03
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) #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(); } |
|
DejaVu |
» 2012-12-23 13:30:31 |
|
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. |
|
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.htmhttp://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa |
|
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! |
|
« 1 » |