Élever un nombre décimal à une puissance de virgule?
L' .net framework fournit dans la classe de Mathématiques d'une méthode pour la mise sous tension double. Mais par exigence de précision j'ai besoin de lever une virgule décimale de puissance [ Pow(une virgule décimale, b) ]. Le cadre de cette fonction? Personne ne sait d'une bibliothèque avec ce genre de fonction?
- Pourquoi un nombre décimal? Je soupçonne que vous êtes plus complique la situation.
- Comment la grande erreur serait acceptable? Comme a^b pour la plupart des valeurs de b donne un nombre irrationnel, il n'y a aucun moyen de représenter avec exactitude de toute façon.
Vous devez vous connecter pour publier un commentaire.
Pour résoudre mon problème, j'ai trouvé quelques l'expansion de la série, et eux je les avais mises en œuvre pour résoudre l'équation X^n = e^(n * ln x).
Le Pow() et Factorielle() les fonctions sont simples parce que le pouvoir est toujours un int (à l'intérieur de la puissance de la série).
power
etvalue
défini? Toute chance vous pourriez placer le code dans une fonction, pour plus de clarté?supercat
pointu, la solution que j'ai utilisé a bien travaillé pour les plus petits numéros qui ont été ma préoccupation à l'époque.Ce devrait être le plus rapide pour un nombre entier positif de l'Exposant et de la base décimale:
Voici un programme C# manuellement mettre en œuvre des Mathématiques.Pow() pour un plus grand degré de précision .NET est le double de la base de la mise en œuvre.
Couper et coller dans linqpad à s'exécuter immédiatement, ou de changer la .Dump()s à la Console.WriteLines.
J'ai inclus un test de la suite. Le test est comme suit:
Je l'ai testé 3 implémentations de taux: (1) Manuel de calcul (2) Excel (3) en Mathématiques.Pow
Le manuel calc a le plus haut degré de précision. Les résultats sont les suivants:
J'ai aussi laissé de côté certains autres rouages là - que j'ai utilisé pour établir que la plus haute factorielle a été capable de tenir dans un ulong (= 22).
Linqpad code:
Je pense que ça dépend beaucoup du nombre que vous prévoyez de le brancher. Si " a " et " b "ne sont pas "gentil" le nombre, alors vous aurez probablement obtenir une valeur qui est non-terminaison qu'il est impossible de magasin et si C# BigDecimal se comporte comme Java BigDecimal probablement déclenche une exception dans ce cas.
Êtes-vous sûr que vous voulez vraiment faire cela? Un
decimal
multiplier est environ 40 fois plus lent quedouble
's, donc je m'attends à une décimaleMath.Pow()
pratiquement inutilisable.Si vous vous attendez à des puissances entières, si, je vous suggère d'utiliser l'entier de l'alimentation en fonction de l'algorithme qui a déjà été discuté ici sur DONC.