6
votes

Itérer à travers toutes les valeurs possibles des points flottants

Comment puis-je répertorier toutes les valeurs possibles d'un type de données à virgule flottante? Je peux faire cela en utilisant un syndicat en C ou C ++, mais cela sera portable?

Comment cela peut-il être fait dans d'autres langues? JavaScript?

supposons simplement que j'utilise cette itération pour mapper theta à sin (theta) . .


3 commentaires

En fait essayez-vous de construire une table de recherche pour le péché dans JavaScript, si oui pourquoi?


Vous avez seulement besoin d'une table de recherche qui couvre 0..pi / 2. Toutes les autres valeurs peuvent être mappées sur cette plage (tant que vous prenez soin des signes, etc.).


Pas vraiment andreas, la question se pose d'une curiosité pure du ralenti.


5 Réponses :


0
votes

Je ne peux pas penser à une façon portable de faire cela. Mais compte tenu d'une représentation de 64 bits (double standard IEEE) et en supposant que la génération d'une valeur prendrait une nanoseconde, il faudrait plus de 500 ans pour générer toutes les valeurs possibles. Donc, vous avez beaucoup de temps à penser à un algorithme :) ...


0 commentaires

1
votes

L'approche syndicale n'est pas tout à fait portable. Cela dépend de la taille des types que vous utilisez. (Si Tailleofof (votre_fp_type)> Tailleof (Your_intype), vous ne pourrez pas itérer sur toute la gamme, même si vous aviez le temps.)

De toute façon que vous allez, réalisez que les valeurs de point flottant possibles ne sont pas réparties de manière uniforme à travers la plage de tout type que vous choisissez. La différence entre les valeurs augmente lorsque vous vous éloignez de 0. Considérant que, et le temps nécessaire pour générer une telle liste, et le fait que vous n'ayez même pas assez d'espace HD pour représenter tous les doubles possibles (je vous garantis Vous ne le faites pas!), sans parler de Ram ... Je dois remettre en question la valeur de la création d'une telle liste. La recherche de la valeur prendrait plus de temps que de faire le calcul.


0 commentaires

2
votes

Comment puis-je énumérer toutes les valeurs possibles de un type de données de point flottant?

Par bit-twiddling the Représentation IEEE-754 de votre valeur de flotteur, car Un flotteur Vous avez besoin de 2 ^ 32 représentations différentes supposant que 4 octets par flotta nécessitent 16 Go de mémoire.

Je suppose que vous avez besoin d'une table de recherche pour la fonction sinusale, simplement une boucle de 0 à 2 * PI par étapes de votre précision requise.


4 commentaires

En utilisant des binaires et (&) et des changements (>>) pour extraire l'exposant et la mantissie, incrémentation de la mantissa à la montage des composants avec binaire ou (|). Honnêtement, j'espère que vous ne le faites pas. Dans cet applet, vous pouvez utiliser des bits simples dans IEEE754 H-SCHMIDT.NET/FLOATAPPLET/EEEE754.HTML


@staquette, Twiddle_float.c (6): Erreur C2296: '>>': illégal, il est de type "flotteur"


@Vulcan evirment usage moulage comme: Sans signé Fval = (non signé) Flooval


@staquette, il n'y a pas de garantie indépendante de la plate-forme que non signée et flottante aies la même taille.



7
votes

Regardez les pages de l'homme pour NextAntaTer () et NextAfterf (). Ils vous ont laissé passer d'un numéro de point flottant au prochain le plus proche. Vous pouvez utiliser l'un d'entre eux pour visiter chaque numéro de FP dans l'ordre.


0 commentaires

0
votes

En plus de NextAprès () , il existe également ldexp () et frexp () pour traiter avec la mantissie et Exponent explicitement.


0 commentaires