2012-06-19 6 views
6

In C#, esiste un tipo chiamato decimal (la struttura System.Decimal). Ho trovato informazioni che mostra come sia meglio che float e double tipi per alcuni casi:C'è qualche "tipo" su Borland C++ Builder come "decimale" da C#?

Esiste un tipo simile per i programmi Builder Borland C++?

+2

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

+1

@ 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. –

+1

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. –

risposta

8

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.

+1

Bella risposta +1 per entrambi e Cthulhu – dash

+0

Dove è la risposta @Cthulhu ??? – kokbira

+1

@kokbira L'Avatar di Michael sembra essere l'immagine di un bravissimo ragazzo di Lovecraftian, noto a volte come Cthulhu. Tranne che non è molto carino. – dash

3

Questi sono i tipi float che è possibile utilizzare a Delfi:

single : 4 bytes (32bits) 
real : 6 bytes (48bits) 
double : 8 bytes (64bits) 
currency: 8 bytes (64bits) (this is probably what you're looking for) 
extended: 10 bytes (80bits) (maps to double when you compile to x64!) 

In C++ Builder sembra che ci sia una classe System::Currency che imita Delphi di costruito nel tipo di valuta. Forse aiuta a guardarlo.

+0

Interessante. Sai se usa base 10 per memorizzare valori? Che dire della gamma di tipo "valuta"? – kokbira

2

Ho trovato questo collegamento Borland C++ Primitive Data types. Visualizza in HTML.

Esiste un tipo lungo doppio con capacità di 10 byte.

Il documento è informativo. Potresti leggerlo comunque.

+0

Molto informativo, ma stavo cercando un modo per utilizzare i valori in virgola mobile memorizzati su base-10 invece che su base-2 per vedere se alcuni calcoli su determinati programmi sarebbero diventati più precisi ... – kokbira

+0

Bene, posso avere calcoli più precisi usando 'long double', per esempio, ma mi piacerebbe valutare una soluzione con base-10 ... – kokbira

+0

Se ho capito correttamente la documentazione di Borland, i tipi di float e double di Borland usano la base 10 invece della base 2. –