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

[C] Wpisywanie do tablicy liczby z X miejscami po przecinku

Ostatnio zmodyfikowano 2014-06-19 19:24
Autor Wiadomość
cbool10
Temat założony przez niniejszego użytkownika
[C] Wpisywanie do tablicy liczby z X miejscami po przecinku
» 2014-06-15 16:25:20
Witam wszystkich.
Czy da się wpisać w tablicy lub określić że wpisana liczba ma mieć np. 1 miejsce po przecinku?
Piszę program w którym istotne jest to żeby na np 10 czy 20 miejscu po przecinku nie pojawiały się jakieś "krzaki" w postaci niechcianych liczb bo psuje to wyniki. Zamiast brak rozwiązania pokazuje jakieś rozwiązanie.
P-112112
killjoy
» 2014-06-15 16:56:52
Pierwsza myśl:
C/C++
#include <stdio.h>
#include <math.h>

float setPrecision( float Var, size_t precision )
{
    long long divideBy = pow( 10, precision );
    long long res = Var * divideBy;
   
   
    return res /( float ) divideBy;
}


int main()
{
   
    printf( "%f", setPrecision( 4.1234567f, 2 ) );
   
}

Ale pamiętaj, że śmieci będą zawsze przy niektórych liczbach, bo liczby rzeczywiste są zapisywane jako potęgi 2, a nie 10.
P-112114
cbool10
Temat założony przez niniejszego użytkownika
» 2014-06-15 17:21:50
To chyba nie do końca to o czym myślę.
Jak tym twoim kodzie w funkcji printf dam żeby wyświetlił 10 miejsc po przecinku to jest tak 4,1199998856a mi zależy na tym żeby tak wyświetlona liczba miała 4,1200000000 i żeby w działaniu została użyta liczba 4,12 a nie np. 4,12000000000000003 bo to już zmienia diametralnie pozostałe wyniki co powoduje wyświetlanie kompletnych bzdur.
P-112117
killjoy
» 2014-06-15 17:39:35
Najwyraźniej
float
 ma za małą precyzję, użyj
double
(wszędzie nie tylko w moim kodzie). Czyli w tym przypadku, o ile masz zamiar używać mojej funkcji, będzie to wyglądało jakoś tak:
C/C++
double setPrecision( double Var, size_t precision )
{
    long long dividedBy = pow( 10, precision );
    long long res = Var * dividedBy;
   
   
    return res /( double ) dividedBy;
}

A, i przy wywołaniu usuń f po liczbie :D
P-112119
Elaine
» 2014-06-15 17:46:47
Czy da się wpisać w tablicy lub określić że wpisana liczba ma mieć np. 1 miejsce po przecinku?
Piszę program w którym istotne jest to żeby na np 10 czy 20 miejscu po przecinku nie pojawiały się jakieś "krzaki" w postaci niechcianych liczb bo psuje to wyniki.
boost::cpp_dec_float
P-112120
killjoy
» 2014-06-15 17:47:33
@UP Autor pyta o C.
P-112121
Elaine
» 2014-06-15 17:53:51
To niech zacznie używać C++, bo nie ma żadnego racjonalnego powodu, by używać C, jeśli na daną platformę istnieje kompilator C++.

A nawet jeśli to koniecznie musi być C, to wtedy może sobie ukraść tamtejsze algorytmy (które są dokładniejsze, niż jakikolwiek ogólnodostępny format liczb zmiennoprzecinkowych — a przecież "piszę program w którym istotne jest to żeby na np 10 czy 20 miejscu po przecinku nie pojawiały się jakieś "krzaki""!). To czysta matematyka, przetłumaczenie tego na C nie powinno stanowić większego problemu.


Można zamiast tego użyć http://www.mpfr.org/.
P-112122
cbool10
Temat założony przez niniejszego użytkownika
» 2014-06-15 18:05:38
killjoypl
Jest lepiej ale :)
Wyświetlenie 20 miejsc po przecinku ukazuje na 16 miejscu wartość 1. Wiem że marudzę ale h(x)=3√(log5(x^2−√x)) (duży pierwiastek jest 3 stopnia nie 3*√) i zakresie x od -5 do 10 z krokiem co 0.2 taka 1 na 16 miejscu powoduje że 0 to już nie 0 i pojawia się dosyć istotny błąd tzn. brak wyniku(pomimo że coś powinno być) lub wyświetlenie wyniku(pomimo że go nie powinno być).

W swoim kodzie mam typ jako double i to jest jeszcze za mało dokładne.

Teraz zastanawiam się czy może da się to trochę inaczej ugryźć. Zamiast dokładną liczbę wpisywać do tablicy to może dało by radę pobierać liczbę z tablicy zaokrągloną do jednego miejsca po przecinku i wykorzystywanie takiej do obliczeń. Czy jest taka opcja?



Alueril
Niestety jestem "zmuszony" przez wykładowce.
P-112124
« 1 » 2 3
  Strona 1 z 3 Następna strona