ホーム > デベロッパ > BREW FAQ

BREW FAQ : 数値計算

乱数を生成するには ?

乱数を生成するには、GETRAND 関数を使用します。

[ BREW API のみを使用したコード ]

byte rand;
GETRAND(&rand, sizeof(byte));

[ SophiaFramework を使用したコード ]

UInt32 rand = SFXBrewRandom::GetUInt32();

SophiaFramework では BREW 標準の乱数の他に LCG 法や MT 法が使えます。

      

double 型の変数を int 型にキャストするには ?

BREW 2.1 には、double 型の値を int 型の値に変換する関数はありません。

以下の手順に従って double 型の値を int 型の値に変換します。 これは、Qualcomm 社が推奨している方法です。

  1. FLOATTOWSTR を使用して double 型の数値をワイド文字列に変換します。
  2. WSTRTOSTR を使用してワイド文字列を char 文字列に変換します。
  3. ATOI を使用して char 文字列を int 型の数値に変換します。

※ BREW 2.1 では FLOATTOWSTR に不具合があり、整数部が 20 桁を超えるとメモリを破壊する恐れがあります。

SophiaFramework では Float32, Float64 型を使うことで通常の float, double と同じように浮動小数点を扱うことができます。

[ BREW API のみを使用したコード ]

// 浮動小数点型の値を整数型の値に変換します。
#define SIZE  64

double   doubleVal       = -1.234;
int      intVal          =  0;
char     charStr[SIZE]   = {0};
AECHAR   aecharStr[SIZE] = {0};

// double 型の数値をワイド文字列に変換します。
boolean b = FLOATTOWSTR(doubleVal, aecharStr, SIZE);
// ワイド文字列を char 文字列に変換します。
WSTRTOSTR(aecharStr, charStr, SIZE);
// char 文字列を int 型の数値に変換します。
intVal = ATOI(charStr);

[SophiaFramework を使用したコード]

// 浮動小数点型の値を整数型の値に変換します。
Float64 doubleVal(-1.234);
SInt32 intVal = (SInt32)doubleVal;
      

デバッグ出力で浮動小数点数を出力できますか?

BREW のドキュメントには記載がありませんが、 DBGPRINTF は内部的に SPRINTF 関数を使用して 文字列を書式化していると思われます。 SPRINTF の説明にあるように、 この関数では %f 書式化文字列をサポートしていません。

浮動小数点数を出力するには、FLOATTOWSTR 関数を使用して いったんワイド文字列に変換してから、さらに char 文字列に変換し、 それを DBGPRINTF で出力するとよいでしょう。