Il tipo decimal
in C#, tipo System.Decimal
di .NET, è solo un numero in virgola mobile memorizzato come codifica in base 10 anziché in base 2. float
e double
sono più tipici numeri in virgola mobile a base 2. Cioè, un double
viene memorizzato come +/- x * 2^y
mentre un numero decimale viene memorizzato come +/- x * 10^y
. Ecco perché fa meglio, come esempio, i dati finanziari, che è tipicamente espresso in termini di x * 10^-2
. Lo standard IEEE 754 (lo standard matematico a virgola mobile) chiama questa matematica "virgola mobile decimale" e definisce una versione a 32 e 64 bit di ciascuno.
In C++, questi tipi sono implementate nel std::decimal
namespace, e sono chiamati std::decimal::decimal32
e std::decimal::decimal64
, nell'intestazione <decimal>
. Se il builder Borland C++ ha questo tipo, lo troverai lì. La libreria C++ di GNU include questa intestazione ma, AFAIK non fa ancora parte dello standard, quindi BCB potrebbe non averlo. In tal caso, dovrai utilizzare una libreria di terze parti. L'esempio di @ dash della libreria Intel Decimal Floating Point è probabilmente la più nota libreria di questo tipo, anche se una ricerca di Google per IEEE 754 Decimal
dovrebbe comparire su altri se, per qualche motivo, ne hai bisogno.
fonte
2012-06-20 00:36:38
Intel ha una libreria http://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library/ che implementa la specifica aritmetica decimale virgola mobile IEEE 754-2008 – dash
@ dash, il collegamento che hai fornito e la libreria Intel sembrano promettenti. Vale la pena provare per qualcuno che ha bisogno di un alto grado di precisione. –
Invece di utilizzare Borland C++ obsoleto, è possibile migrare a C++ .NET e utilizzare System.Decimal? Certamente puoi creare un piccolo programma in .NET dati gli input. –