Problem z "pojemnoscią" typu Double. Istnieje coś większego?

0

Witam. Mam problem, otóż moje obliczenia do projektu szkolnego wymagają dużej precyzji, i zmienna double przechowująca do 15 cyft nie jest zupełnie zadowalająca.
Istnieje jakiś sposób na przechowanie liczby o wielu cyfrach po przecinku chociażby w częściach, co by pozwalało na dalsze wykonywanie działań na tych liczbach?

Microsoft podaje że zmienna double jak i double long, "pomieszczą" tyle samo cyfr, tak więc nie wystarczą już standardowe typy zmiennych.

0

Dla większych liczb operuje się na stringach. A obliczenia wykonujesz tak jak pisemnie.
Są też już gotowe biblioteki do pobrania z internetu.

1

Ja za to proponuję nie męczyć się ze stringami, tylko użyć przeznaczonych typów do takich operacji.
http://msdn.microsoft.com/en-us/library/364x0z75.aspx decimal ma ok. 2 razy większą precyzję od double.
http://msdn.microsoft.com/en-us/library/system.decimal.aspx

0

Ale to musiałaby pisać w C++/CLI lub w C# tak?

0

No tak, ale skoro w tagu tematu jest clr...

0
byku_guzio napisał(a)

No tak, ale skoro w tagu tematu jest clr...

Dobrze dobrze, wszystko się zgadza, pracuje w Visual C++ nad programem "okienkowym" więc CLI/C++ jak najbardziej jest na miejscu.
Dziękuję za linki, przejrzę je, i pobawię się trochę..

Jednak mam z tym problem. Jakiekolwiek próby zadeklarowania "decimal" skutkują błędęm: 'decimal' : undeclared identifier
W przykładach na stronie microsoft, widze także że są tylko dla języka c# a Pisze w CLI/C++

1

decimal jest w C#. w C++/CLI jest Decimal.

a we Frameworku 4.0 jest System::Numerics::BigInteger. czyli wielka liczba całkowita. trochę wyobraźni i do liczb rzeczywistych też da się zastosować.

1

Ja bym spróbował GNU MP, jest wystarczający dla Mathematiki, więc pewnie też do bardziej podstawowych zastosowań. Nie wiem jednak jak wygląda wsparcie dla VS.

0

Microsoft podaje że zmienna double jak i double long, "pomieszczą" tyle samo cyfr, tak więc nie wystarczą już standardowe typy zmiennych.

long double ma więcej - z 19 cyfr.

Jessica napisał(a)

Istnieje jakiś sposób na przechowanie liczby o wielu cyfrach po przecinku chociażby w częściach, co by pozwalało na dalsze wykonywanie działań na tych liczbach?

Jest sposób, np. dwa double i masz 30 cyfr.

2.00000000000000000000000001 = 2 + 1.0e-30;

zatem trzymasz to w parce double:
double a[2] = {2, 1e-30};

Potem operacje na takich parach - do prostych obliczeń wystarczy dodawanie i mnożenie.

Przykładowo:
a = {2, 1e-30};
b = {1000, 5e-20};

a + b = ?
a * b = ?

Metoda dobra, gdy ważna jest szybkość, bo jest dużo obliczeń - symulacje, równania różniczkowe, itp.

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