第15章Caché関数コレクション$ FACTOR関数
整数を$BIT
ビット文字列に変換します。
概要
$FACTOR(num,scale)
パラメータ
- num計算結果は数値式です。numは、ビット文字列変換の前に正の整数に変換されます。負の数は正の数(その絶対値)に変換されます。小数は整数に丸められます。
- scaleオプションの整数。整数の10進数の累乗(指数表記)の乗数として使用されます。デフォルト値は0です。
解説
$FACTOR
指定された整数のバイナリ表現に対応する$BIT
フォーマットビット文字列を返します。次のことを行います。
- 負の数が指定された
$FACTOR
場合、その数の絶対値が使用されます。 - 小数点以下の桁数を指定する場合は、
$FACTOR
整数に10 **の小数点以下の桁数を掛けます。 - 10進数を指定
$FACTOR
すると、整数に丸められます。丸めの際、Cachéは10進数の.5を次に大きい整数に丸めます。 $FACTOR
整数をそのバイナリ表現に変換します。$FACTOR
この2進数を$BIT
エンコードされたバイナリ形式に変換します。
返されるバイナリ文字列は、位置1の最下位ビット(位置1の位置)から始まるビット位置を示します。これは$BIT
、さまざまな関数で使用されるビット文字列に対応しています。
パラメータ
一つに
数値(または計算結果が数値である式)。$factor
Scaleパラメーター(指定されている場合)を適用し、この数値を四捨五入して整数に変換してから、対応するビット文字列を返します。数値は正でも負でもかまいません。numが混合数値文字列(たとえば、 " 7wwarves
"または " 5.6.8
")の場合、非数値文字が検出されるまで$factor
文字列のデジタル部分を変換します(この例7
とのように5.6
)。numがゼロ、ゼロに丸められた、空の文字列(“”
)、または数値以外の文字列の場合、$factor
空の文字列が返されます。$DOUBLE
値INF
、-INF
およびNaN
空の文字列を返します。
規模
Numに適用される指数表記の指数を指定する整数。たとえば、比率が2の場合、比率は2または100の10の指数を表します。スケール値はNumで乗算されます。たとえば$factor(7,2)
、整数700に対応するビット文字列を返します。この乗算は、numを整数に丸める前に行われます。デフォルトでは、スケールは0です。
例
次の例は、整数1から9へのビット文字列への変換を示しています。
/// d ##class(PHA.TEST.Function).FACTOR()
ClassMethod FACTOR()
{
SET x=1
WHILE x<10 {
WRITE !,x,"="
FOR i=1:1:8 {
WRITE $BIT($FACTOR(x),i)
}
SET x=x+1
}
}
DHC-APP>d ##class(PHA.TEST.Function).FACTOR()
1=10000000
2=01000000
3=11000000
4=00100000
5=10100000
6=01100000
7=11100000
8=00010000
9=10010000
次の例は$FACTOR
、負の数と小数の正の整数への変換を示しています。
/// d ##class(PHA.TEST.Function).FACTOR1()
ClassMethod FACTOR1()
{
FOR i=1:1:8 {
WRITE $BIT($FACTOR(17),i)}
WRITE " 正整数",!
FOR i=1:1:8 {
WRITE $BIT($FACTOR(-17),i)}
WRITE " 负整数 (绝对值)",!
FOR i=1:1:8 {
WRITE $BIT($FACTOR(16.5),i)}
WRITE " 正小数(四舍五入)",!
FOR i=1:1:8 {
WRITE $BIT($FACTOR(-16.5),i)}
WRITE " 负小数(四舍五入)",!
FOR i=1:1:8 {
WRITE $BIT($FACTOR(-16.4),i)}
WRITE " 负小数(四舍五入)"
}
DHC-APP>d ##class(PHA.TEST.Function).FACTOR1()
10001000 正整数
10001000 负整数 (绝对值)
10001000 正小数(四舍五入)
10001000 负小数(四舍五入)
00001000 负小数(四舍五入)
次の例は、scaleパラメータが指定されたときに返されるビット文字列を示しています。
/// d ##class(PHA.TEST.Function).FACTOR2()
ClassMethod FACTOR2()
{
SET x=2.7
WRITE !,x," scaled then rounded to an integer:",!!
FOR i=1:1:12 {
WRITE $BIT($FACTOR(x),i)
}
WRITE " binary = ",$NORMALIZE(x,0)," decimal",!
SET scale=1
SET y=x*(10**scale)
FOR i=1:1:12 {
WRITE $BIT($FACTOR(x,scale),i)
}
WRITE " binary = ",$NORMALIZE(y,0)," decimal",!
SET scale=2
SET y=x*(10**scale)
FOR i=1:1:12 {
WRITE $BIT($FACTOR(x,scale),i)
}
WRITE " binary = ",$NORMALIZE(y,0)," decimal"
}
DHC-APP>d ##class(PHA.TEST.Function).FACTOR2()
2.7 scaled then rounded to an integer:
110000000000 binary = 3 decimal
110110000000 binary = 27 decimal
011100001000 binary = 270 decimal