2011-07-12 4 views
3

単精度と倍精度の間で変換できる方法を探しています。 1つの例として、2つの整数を除算して浮動結果を得ることが挙げられます。そんなことがあるものか?2つの整数を除算してForthで浮動小数点数を求める方法は?

+2

どのような種類のものを使用していますか? – sheepez

+0

ans(これはあなたの質問に答えるかどうかは分かりませんが、最も標準的なものであると考えられます:ANS) –

+0

浮動小数点サポートは、いくつかの実装ではそれがないかもしれません。 – sheepez

答えて

7

NBを。 rvmの答えは、標準によって保証されていないが、非常に一般的な別個の浮動小数点スタックに依存している。 kForthでは、統一された浮動小数点スタックと2セルのフロートを持つシステムでは、あなたはまだ標準ではありません

: 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/ ; 

を書くかもしれません:それは、FP番号がスタック上にあるどのように広いについての知識に依存しています。

: 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/ ; 

あなたの最善の選択肢は、ちょうど環境依存性を宣言し、あなたの道を行くことです。別々の浮動小数点スタックが本当に役立ちます。すべてのことがそうです。そして、簡単なプレリュードは、統合されたFPを提供する非常にまれなシステムの1つにコードを移植する必要がある場合、ソフトウェアでFPスタックを実装できますスタック。

これ以外にも、ここでは2番目の答えがあります。小数点以下の値を扱うために浮動小数点数は必要ありません(場合によってはお金のように、それらを必要としないだけでなくそれらを望んでいない)。 Forthは、スケーリング演算子とカスタム数値出力で固定精度の数値を使用するのが非常に簡単です。

カスタム数値出力の例:

: .$ ($ --) 
    s>d <# # # [char] . hold #s [char] $ hold #> type ; 

100 .$ \ outputs: $1.00 
1525 .$ \ outputs: $15.25 

スケール分割の例:

\ 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 

n1 n2 n3 */n1 n2 * n3 /よりも正確であることに注意してください - スペックを読み出す。)

: 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!) 

それについての2つの注釈$単語。第一に、それはシステムに環境依存性を持っています。終わりではなく、どこにでもあります。第二に、それはaで数字を受け入れる。 どこにでもが含まれていますが、末尾にも数字は2つの小数点以下の数字が含まれています。たとえば、$ 4235.は42ドルと35セントと解釈され、4千5000ドルではありません。だからこそ、それはむちゃくちゃですが、より厳密で移植性の高い構文解析ワードを書くことができます。

「余分な作業のように聞こえるかもしれませんが、浮動小数点数はプログラマーの規律を要求しません」と言うかもしれません。あなたがその印象を化石化させる前に、

(sheepezさんの質問には、浮動小数点数をサポートしていない遠隔のANS Forthシステムはありません。あなたのForthシステムの文書に相談してください)

+0

あなたは良いMac OS Xのコンパイラを知っていますか(何か平凡な、何も想像できません!) –

+1

@ Marci-man [Mops](http://sourceforge.net/apps/mediawiki/powermops/index.php?title=Main_Page)ネイティブOSX Forthですが、少し古くなっています。 SwiftForth、VFX Forth、iForthはOSX上でうまく動作します。 gforthはOSXをUNIX上で動作させることはできますし、夢中ではありませんが、まだ非常に快適です。もし私が自分であれば、SwiftForthと一緒に行くつもりだった(とにかく私のバージョンをアップグレードするつもりだが)、もし私があなただったら、gforth(無料)またはiForth(130ドル程度)私は私ではありませんでしたが、まだForthに満足している人は、私はMopsを取得し、Enter/Enterの区別を削除することを検討したいと思います。 –

+0

優れた副回答。はい、浮遊物をまったく使用しないでください。 – AshleyF

関連する問題