Un peu de diversion en virgule flottante (im) précision, partie 1

La plupart des mathématiciens conviennent que:

e ? i + 1 = 0

Cependant, la plupart des implémentations à virgule flottante ne sont pas d'accord. Comment pouvons-nous régler ce différend?

Je suis désireux d'entendre parler de différentes langues et implémentations, et de diverses méthodes pour rendre le résultat aussi proche de zéro que possible. Sois créatif!

0
@Foo Bah: J'ai renvoyé votre modification, parce que le point est que c'est une expression qui contient 0, 1, i, e, et? Si vous réécrivez cela comme exp , alors il perd sa "poésie".
ajouté l'auteur Chris Jester-Young, source
@ FooBah: Pas vrai. Les mathématiciens (en particulier ceux formés aux subtilités du virgule flottante) ne sont pas d'accord avec que exp (pi * i) + 1 = 0 . C'est seulement la forme mathématique pure qui est acceptée comme vraie. La question est une exploration de la "fuite" qui est en termes de virgule flottante.
ajouté l'auteur Chris Jester-Young, source
@FooBah: Parce que vous justifiez en utilisant exp par sa base en virgule flottante, ce qui amène la forme exp dans le domaine du flottant. Évidemment, en termes de virgule flottante, exp (pi * i) + 1! = 0 . Ainsi, votre changement pour utiliser exp , en suivant votre logique de changement en exp en premier lieu, fausserait la première phrase du message.
ajouté l'auteur Chris Jester-Young, source
Les deux, en fait. J'avais besoin d'une borne supérieure sur E (| m-X | ^ 3), mais la quantité m elle-même - qui est une sorte de mesure de tendance centrale analogue à la moyenne ou à la médiane - pourrait aussi être intéressante. (J'ai trouvé un moyen de contourner cela dans la preuve, cependant, donc la question est purement pour la curiosité maintenant.)
ajouté l'auteur Robert Höglund, source
@ ChrisJester-Young La question portait sur l'évaluation en virgule flottante de l'expression exp (pi * i) + 1 , et non sur la beauté mathématique.
ajouté l'auteur Foo Bah, source
@ ChrisJester-Young Veuillez expliquer comment quelqu'un peut accepter e ** (? I) + 1 = 0 mais ne peut pas accepter exp (? I) + 1 = 0 sur un plan mathématique. Si vous explorez le problème des virgules flottantes, l'expression que vous utilisez n'a pas d'importance: les deux sont identiques.
ajouté l'auteur Foo Bah, source
C'était vraiment agréable d'essayer de répondre à cette question, il y a beaucoup de réflexion parallèle. :)
ajouté l'auteur Damian Lattenero, source
Je suis encore confus. Demandez-vous à propos de la quantité $ E (| m-X | ^ 3) $ ou du $ m $ qui minimise $ E (| m-X | ^ 3) $?
ajouté l'auteur mreggen, source
Seulement la plupart des mathématiciens?
ajouté l'auteur biozinc, source

6 Réponses

Le minimiseur $ m $ est la projection ponctuelle la plus proche de $ X $ sur le sous-espace de $ L ^ p $ formé par les fonctions constantes ($ p = 3 $ dans votre cas). Ce $ m $ est parfois appelé $ p $ -prediction ou $ p $ -predictor $ X $. Apparemment, cette terminologie a commencé avec Andô et Amemiya . Certains des articles suivants sont Landers et Rogge (qui a écrit quelques autres articles, par exemple celui-ci , et Cuesta et Matrán . Le terme "attente généralisée (conditionnelle)" est également apparu.

5
ajouté

Soit f (x) la fonction de densité de probabilité de X. On peut définir les moments de droite et de gauche et de droite de X par rapport à m comme suit:

Un kième moment d'un côté de x de gauche par rapport à m = int _ [- inf m] (m-x) ^ k f (x) dx

Le kième moment de la main droite de x par rapport à m = int [m inf] (x-m) ^ k = f (x) dx

On observe les analogies suivantes

  1. La médiane est la statistique pour laquelle les moments unilatéraux à gauche et à droite sont égaux (les dix derniers sont de simples probabilités)

  2. Pour la moyenne, les premiers moments unilatéraux à gauche et à droite sont égaux.

  3. Pour la statistique définie dans la question, les seconds moments unilatéraux gauche et droit sont égaux.

1
ajouté
Le mode est aussi le cas limite m-> 0; Cela m'a été signalé à terrytao.wordpress.com/ 2009/05/06/at-la-fefferman-conferenc & zwnj; e
ajouté l'auteur Terry Tao, source

E (| X-EX | ^ k) est appelé le k-ème moment central (ou centré) de la variable aléatoire X.

1
ajouté

Voici une courte liste d'implémentations et de langues que j'ai essayées. Il est trié par proximité à zéro:

  • Scheme: (+ 1 (make-polar 1 (atan 0 -1)))
    • ? 0.0+1.2246063538223773e-16i (Chez Scheme, MIT Scheme)
    • ? 0.0+1.22460635382238e-16i (Guile)
    • ? 0.0+1.22464679914735e-16i (Chicken with numbers egg)
    • ? 0.0+1.2246467991473532e-16i (MzScheme, SISC, Gauche, Gambit)
    • ? 0.0+1.2246467991473533e-16i (SCM)
  • Common Lisp: (1+ (exp (complex 0 pi)))
    • ? #C(0.0L0 -5.0165576136843360246L-20) (CLISP)
    • ? #C(0.0d0 1.2246063538223773d-16) (CMUCL)
    • ? #C(0.0d0 1.2246467991473532d-16) (SBCL)
  • Perl: use Math::Complex; Math::Complex->emake(1, pi) + 1
    • ? 1.22464679914735e-16i
  • Python: from cmath import exp, pi; exp(complex(0, pi)) + 1
    • ? 1.2246467991473532e-16j (CPython)
  • Ruby: require 'complex'; Complex::polar(1, Math::PI) + 1
    • ? Complex(0.0, 1.22464679914735e-16) (MRI)
    • ? Complex(0.0, 1.2246467991473532e-16) (JRuby)
  • R: complex(argument = pi) + 1
    • ? 0+1.224606353822377e-16i
0
ajouté
J'ai vraiment du bon temps avec ce post, merci beaucoup
ajouté l'auteur Damian Lattenero, source

Est-il possible de régler ce différend?

Ma première pensée est de regarder un langage symbolique, comme Maple . Je ne pense pas que cela compte comme virgule flottante.

En fait, comment représente-t-on i (ou j pour les ingénieurs) dans un langage de programmation conventionnel?

Peut-être un meilleur exemple est sin (?) = 0? (Ou ai-je raté le point à nouveau?)

0
ajouté
C'est, en fait, très semblable à la question de savoir si le péché? = 0. Encore une fois, aucune implémentation de FP que j'ai ici montre qu'il est 0, donc, je suppose que le "différend" ne peut pas être entièrement résolu à 100%. Mais puisque nous parlons de PF, des solutions approximatives devront être prises. :-P De nombreux langages de programmation ont une classe de nombres complexes, qui contient simplement deux double . Pour moi, c'est assez bon, si la langue a aussi des facilités pour faire des opérations surchargées (par exemple, l'utilisation de cmath en
ajouté l'auteur Chris Jester-Young, source

Je suis d'accord avec Ryan, il faudrait passer à un autre système de représentation numérique. La solution est en dehors du domaine des calculs en virgule flottante car vous avez besoin de pi pour représenter comme une décimale infiniment longue, donc n'importe quel schéma de précision limitée ne fonctionne pas (du moins sans utiliser un facteur de fudge pour compenser la perte précision).

0
ajouté