DATAスタックーFPスタック間の移行

浮動小数点数スタック上の小数と整数スタック上の整数とを直接に足し合わせたりすることはできません。同じスタックの上に一旦揃える必要があります。整数でもリテラルであれば、小数部分を.0とぶら下げれば浮動小数点数と解釈されますが、整数スタック上での演算やワードの結果であるような場合には、整数スタック上に結果が残ってしまいますし、浮動小数点数間の演算の結果は浮動小数点数スタックに結果を残すしかありません。そこで、スタック間での数値の移動が、場合によっては必要になります。整数スタック上のアイテムを浮動小数点数スタックに移すには、s>fというワードを使います。
s>f   ( x -- ) ( F: -- x )
浮動小数点数と整数の演算は浮動小数点数としての結果が欲しい場合が多いでしょうから、このワードを用いる場面は多いでしょう。記号の意味は"シングル トゥ フロート"です。"シングル"というのは、1セル(4バイト)で表現される普通の整数という意味です。2セルで表現される"ダブル"整数との対比でこのようになっています。

整数間の演算でも、割り算の場合には結果を浮動小数点数で得たい場合もあります。リテラルで計算するなら、例えば7/3を小数で結果を得るには、
7.0  3.0  f/
とすればよいわけですが、整数スタック上にアイテムがあった場合、順序に注意する必要があります。
7  3  swap  s>f  s>f  f/
または
7  3  s>f  s>f  fswap  f/
トップスタック値から順に移されていくので、移動後には上下が反転してしまうのです。

浮動小数点数で出た結果の整数部分だけを整数スタックに移すのは、"f>s"です。小数点以下は切り捨て(丸め込み)されます。
f>s     ( -- x )  ( F: x -- )


関連項目:






最終更新:2018年12月20日 16:18