J'ai une application que je veux pouvoir utiliser des nombres volumineux et des nombres très précis. Pour cela, j'avais besoin d'une interprétation de précision et IntX ne fonctionne que pour les entiers. p>
Y a-t-il une classe dans le cadre .NET ou même une tierce partie (de préférence libre) qui ferait cela? P>
Y a-t-il une autre façon de faire cela? P>
9 Réponses :
Peut-être le Type décimal fonctionnerait pour vous? P>
Merci gars, je m'interrogeais sur la performance, mais avec la quantité de précision que je reçois, cela ne devrait pas être un problème. La décimale peut-elle gérer un grand nombre?
Selon Stackoverflow.com/Questtions/230105/net-Decimal -Quel-in-in-sql , décimal peut gérer jusqu'à 29 chiffres à gauche du point décimal (et 28 à droite). Est-ce assez grand?
@Tim Pietzcker Link est cassé
@sra: Merci pour la tête. J'ai mis à jour le lien vers un article de Jon Skeet. Celui-ci devrait être plus stable :)
Il y a un autre inconvénient à utiliser décimal, et c'est la gamme dynamique. Décimal.MAXValue est de 79 228 162 514 264 337 593 543 950 335, ou 7.9E28. Il ne peut pas être utilisé comme substitut des doubles calculs avec une précision supérieure, car le double a une plage dynamique de +/- 1e308
Decimal n'est également que 102 bits ... avec 26 morceaux de rembourrage.
Utiliser décimal code> pour cela si possible. p>
décimal code> est de 128 bits si cela fonctionnerait. p>
La bibliothèque F # a également des types de nombres vraiment gros aussi bien si vous êtes d'accord avec celui-ci ... P>
Bonjour Justin, intéressé d'entendre plus - Pouvons-nous faire du double double (80bits ou 128bits) dans F #? Tous les types décimaux en C # ont des bits élevés mais pas d'exposant
Si Decimal ne fonctionne pas pour vous, essayez de mettre en œuvre (ou de saisir du code de quelque part) rationnel code> arithmétique en utilisant de gros entiers. Qui fournira la précision dont vous avez besoin. P>
Vous avez un lien pour quelque chose que je pourrais porter?
Decimal est un type de valeur de 128 bits (16 bit) utilisé pour des calculs très précis. C'est un type de point flottant qui est représenté en interne comme base 10 au lieu de la base 2 (c'est-à-dire binaire). Si vous devez être très précis, vous devez utiliser décimal - mais l'inconvénient est que la décimale est d'environ 20 fois plus lente que d'utiliser des flotteurs. p>
Decimal contient 26 morceaux de zéros de rembourrage, donc ce n'est vraiment que 102 bits.
Vous pouvez utiliser la précision arbitraire disponible librement disponible, BigDecimal de Placez une référence à VJSLIB dans votre projet et vous pouvez quelque chose comme ceci: P> Java.Math code>, qui fait partie du j # package redistribuable à partir de Microsoft et est une bibliothèque gérée .Net.
using java.math;
public void main()
{
BigDecimal big = new BigDecimal("1234567890123456789011223344556677889900.0000009876543210000987654321");
big.add(new BigDecimal(1.0));
Debug.Print(big);
}
Je cherche une solution pour cela pendant une longue période et je suis rentré aujourd'hui sur cette bibliothèque: P>
Double précision quadruple en C # P>
Bibliothèque de types de données de points flottants de 128 bits de 128 bits, avec 64 bits de précision efficaces (vs 53 pour les doubles) et un exposant 64 bits (contre 11 pour les doubles). Les quads ont une plus grande précision et beaucoup plus grand que les doubles et sont particulièrement utiles lorsqu'ils traitent avec de très grandes ou très petites valeurs, telles que celles des modèles probabilistes. A partir de la version 2.0, tous les arithmétiques quadriques sont vérifiés (en débordant à 0, débordant de +/- Infinity), contient des valeurs de positionnement, de négatifInfinity et de NaN, et suit les mêmes règles que les opérateurs de double arithmétique et de comparaison (par exemple, 1 / 0 == PositinerInfinityFinity, 0 * Positinerinfinity == NaN, Nan! = NaN), ce qui en fait un remplacement d'une liste déroulante pratique pour les doubles dans le code existant. P> blockQuote>
^ Decimal n'a nulle part près de la gamme dynamique de double ou de flotteur comme aucun exposant. Voir le flotteur Quad Precision dans C # Répondez ci-dessous!
@ Dr.Abt: Il a un exposant ... mais beaucoup plus petit que le double, plus petit, même que de flotter, même en considérant la base différente.