Je cherche un moyen de pouvoir traduire entre simple précision et double précision. Un exemple serait de diviser 2 entiers et obtenir un résultat flottant. Comment est-ce possible?Comment diviser deux entiers et obtenir un résultat en float en Forth?
Répondre
10 7
SWAP S>D D>F S>D D>F F/
F.
> 1.4285714 Ok
voir aussi: http://forth.sourceforge.net/std/dpans/dpans12.htm
NB. La réponse de rvm repose sur une pile à virgule flottante séparée, qui - bien que non garantie par la norme - est extrêmement commune. Sur kForth, un système avec une pile à virgule flottante unifié et flotteurs à deux cellules, vous pourriez écrire
: s>f s>d d>f ;
: r/ (n n -- r) \ 'r' for floating-point; 'f' for flags, true/false.
swap s>f rot s>f f/ ;
, qui est toujours pas la norme: elle repose sur les connaissances sur la façon dont grand nombre de PF sont sur la pile. Voici deux méthodes portables:
: r/ (n1 n2 -- r)
locals| n2 n1 |
n1 s>f n2 s>f f/ ;
: r/ (n1 n2 -- r)
>r s>f r> s>f f/ ;
Bien que votre meilleure option soit de simplement déclarer la dépendance environnementale et de continuer votre chemin. Une pile flottante séparée aide vraiment, à peu près tout fait comme ça, et un bref prélude peut implémenter une pile FP dans un logiciel si jamais vous voulez porter votre code sur l'un des très rares systèmes qui vous présente un FP unifié empiler. Tout cela mis à part, voici une deuxième réponse à votre question: vous n'avez pas besoin de nombres à virgule flottante pour traiter des valeurs fractionnaires (et dans certains cas, comme l'argent, non seulement vous n'en avez pas besoin mais ne les veux pas). Forth vous permet d'utiliser des nombres à précision fixe avec des opérateurs de mise à l'échelle et des sorties numériques personnalisées.
Un exemple de sortie numérique personnalisée:
: .$ ($ --)
s>d <# # # [char] . hold #s [char] $ hold #> type ;
100 .$ \ outputs: $1.00
1525 .$ \ outputs: $15.25
Un exemple de division à l'échelle:
\ what's 14 divided by three, with four fractional digits of precision?
14 1000 3 */ \ result: 4666 -- use a word like .$ to display it as 4.666
(Notez que n1 n2 n3 */
est plus précis que n1 n2 * n3 /
- lire la spécification.)
: cents (n -- $) ;
: dollars (n -- $) 100 * ;
: $ ("$" -- $)
parse-word evaluate d>s ;
\ what's 14 dollars divided by 3?
14 dollars 3/.$ \ outputs: $4.66
\ what's 42.35 dollars divided by 2?
$ 42.35 2/.$ \ outputs: $21.17 (note the loss of a penny!)
Deux notes à propos de ce mot $
. Tout d'abord, il a une dépendance environnementale sur le système acceptant comme un double un nombre avec un. n'importe où, plutôt que juste à la fin. Deuxièmement, il accepte les chiffres avec a. dans eux, même à la fin, mais les chiffres sont toujours interprétés pour avoir deux chiffres fractionnaires - par exemple, $ 4235.
est interprété comme 42 dollars et 35 cents, et non quatre mille deux cent trente-cinq dollars. Donc, il est bâclé, mais vous pouvez écrire un mot d'analyse qui est à la fois plus stricte et plus portable.
Vous pourriez dire, "cela ressemble à du travail supplémentaire, les nombres à virgule flottante n'exigent pas autant de discipline de programmeur." Eh bien, avant de vous laisser cette impression fossiliser, lire What Every Computer Science Must Know About Floating-Point Arithmetic :-)
(A la question de sheepez, il n'y a pas le système à distance graves ANS Forth qui ne dispose pas de nombre à virgule flottante de soutien. Vous devrez peut-être charger les installations de PF, mais ils seront là - et 'loadable' ne signifie pas 'tacked on' ou 'moins efficace' Consultez les documents de votre système Forth.)
connaissez-vous un bon compilateur Mac OS X quatrième (quelque chose de banal, rien d'extraordinaire!) –
@ Marci-man [Mops] (http://sourceforge.net/apps/mediawiki/powermops/index.php?title=Main_Page) est un OSX Forth natif, mais est un peu vicié. SwiftForth, VFX Forth, iForth tout fonctionne bien sur OSX. gforth fonctionnera sur OSX comme sur n'importe quel unix, et ne sera pas fantaisie, mais reste très confortable. Si j'étais moi-même, j'irais avec SwiftForth (comme je vais bientôt mettre à jour ma version), mais si j'étais vous, je considérerais fortement gforth (free) ou iForth (130 ou USD), et si Je n'étais pas moi mais encore quelqu'un déjà à l'aise avec Forth, je envisagerais d'obtenir Mops et en supprimant sa distinction Enter/Enter. –
Excellente réponse secondaire. Oui, essayez de ne pas utiliser de flotteurs du tout. – AshleyF
- 1. Comment puis-je diviser deux entiers pour obtenir un double?
- 2. Comment - Diviser un int en deux ints?
- 3. Comment diviser une chaîne en entiers en Python?
- 4. Comment convertir un entier en float en Java?
- 5. Comment diviser en deux groupes?
- 6. Comment obtenir un nombre Float avec 2 nombres entiers?
- 7. Diviser un vecteur en deux
- 8. Float/Float = résultat étrange
- 9. Comment diviser un littéral en deux parties
- 10. En Python, comment diviser une chaîne en plusieurs entiers?
- 11. Quelle est la bonne façon de diviser deux valeurs Int pour obtenir un Float?
- 12. Fusionner deux entiers en Python
- 13. Comment diviser deux entiers dans une variable double?
- 14. float split en Java Android
- 15. Diviser en deux variables?
- 16. Multiplication de deux entiers donnés en binaire
- 17. Comment diviser cette chaîne en deux parties?
- 18. JSplitPane - diviser l'application en deux?
- 19. Comment diviser un nombre à deux chiffres en C
- 20. Diviser les observations en deux
- 21. Comment obtenir un float à partir d'un char * en C++?
- 22. iOS, comment diviser UITableView en deux
- 23. Comment comparer deux entiers et obtenir une réponse booléenne
- 24. Comment diviser un court non signé en deux
- 25. Obtenir le pourcentage de deux entiers
- 26. comment diviser une scène en deux parties?
- 27. Diviser HtmlTableCell en deux C#
- 28. Comment diviser un NSArray en deux parties égales?
- 29. Diviser deux listes en python
- 30. Diviser une table en deux
Quel type de quatrième utilisez-vous? – sheepez
ans (je ne suis pas vraiment sûr si cela répond à votre question, mais il est censé être le plus standard: ANS) –
Ok, je demandais parce que pour autant que je sache, le support de virgule flottante est une partie facultative de la standard et vous ne l'avez peut-être pas dans certaines implémentations. – sheepez