7
votes

Y a-t-il une classe double de 128 ou 256 bits dans .NET?

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.

Y a-t-il une classe dans le cadre .NET ou même une tierce partie (de préférence libre) qui ferait cela?

Y a-t-il une autre façon de faire cela?


2 commentaires

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


9 Réponses :


9
votes

Peut-être le Type décimal fonctionnerait pour vous?


6 commentaires

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.



2
votes

Utiliser décimal pour cela si possible.


0 commentaires

1
votes

décimal est de 128 bits si cela fonctionnerait.


0 commentaires

4
votes

La bibliothèque F # a également des types de nombres vraiment gros aussi bien si vous êtes d'accord avec celui-ci ...


1 commentaires

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



3
votes

Si Decimal ne fonctionne pas pour vous, essayez de mettre en œuvre (ou de saisir du code de quelque part) rationnel arithmétique en utilisant de gros entiers. Qui fournira la précision dont vous avez besoin.


1 commentaires

Vous avez un lien pour quelque chose que je pourrais porter?



2
votes

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.


1 commentaires

Decimal contient 26 morceaux de zéros de rembourrage, donc ce n'est vraiment que 102 bits.



6
votes

Vous pouvez utiliser la précision arbitraire disponible librement disponible, BigDecimal de Java.Math code>, qui fait partie du j # package redistribuable à partir de Microsoft et est une bibliothèque gérée .Net.

Placez une référence à VJSLIB dans votre projet et vous pouvez quelque chose comme ceci: P>

using java.math;

public void main() 
{
    BigDecimal big = new BigDecimal("1234567890123456789011223344556677889900.0000009876543210000987654321");
    big.add(new BigDecimal(1.0));
    Debug.Print(big);
}


0 commentaires

3
votes

Je cherche une solution pour cela pendant une longue période et je suis rentré aujourd'hui sur cette bibliothèque:

Double précision quadruple en C #

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.


0 commentaires

2
votes

Plug Shameless: QPFloat émule la norme IEEE à la précision complète.


0 commentaires