前のページ次のページ上に戻るホーム SophiaFramework 2.2
SFUDouble
浮動小数点数を表すクラスです。
#include <SFUDouble.hpp>
class SFUDouble;
typedef SFUDouble&          SFUDoubleRef;
typedef SFUDouble*          SFUDoublePtr;
typedef SFUDouble**         SFUDoubleHandle;
typedef const SFUDouble     ConstSFUDouble;
typedef const SFUDouble&    ConstSFUDoubleRef;
typedef const SFUDouble*    ConstSFUDoublePtr;
typedef const SFUDouble**   ConstSFUDoubleHandle;

解説

SFUDouble クラスは C++ 言語の double 型をカプセル化しています。 BREW では C++ 言語の double 型に対して演算子を使用した計算を行っては いけないことになっており、FADDFMUL などの浮動小数点演算用の関数を 使わなければなりません。 SFUDouble はこのような関数呼び出しをカプセル化し、 演算子による自然な記法を実現します。

BREW 2.1 では、浮動小数点演算を行うヘルパー関数がいくつか追加されており、 それらの関数は BREW 2.0 では使用することができませんが、 SFUDouble クラスでは、可能な限り BREW 2.0 と BREW 2.1 の両方で使える関数を提供しています。 たとえば、BREW 2.1 で追加された FCEIL, FFLOOR などの関数は BREW 2.0 では使用できませんが、 それと同じ演算を行う SFUDouble クラスの CeilFloor は BREW 2.0 でも使用可能です。

BREW API で用意されている関数以外にも、 三角関数や指数対数関数などが用意されています。

参照

項3.8 | SFUTrigonometric

メンバ

コンストラクタ/デストラクタ
public
SFUDouble SFUDouble クラスのコンストラクタです。
パブリック関数
public
Abs 絶対値を返します。
public
static
Atan x のアークタンジェント関数の値を返します。
public
static
Atan2 y / x のアークタンジェント関数の値を返します。
public
Ceil x 以上の最小の整数値を返します。
public
static
Cos x のコサイン関数の値を返します。
public
static
DegreeToRadian 度をラジアンに変換します。
public
Exp x の指数関数の値を返します。
public
Floor x 以下の最大の整数値を返します。
public
IsFinite 有限な値であるか判定します。
public
IsNaN 非数であるか判定します。
public
Log x の対数関数の値を返します。
public
Log10 x の 10 を底とする対数関数の値を返します。
public
static
MaxValue double 型で表現可能な正の最大値を返します。
public
static
MinValue double 型で表現可能な正の最小値を返します。
public
Mod 剰余を計算します。
public
static
Pi 円周率を返します。
public
Pow x の y 乗を計算します。
public
static
RadianToDegree ラジアンを度に変換します。
public
Round 最も近い整数に丸めた値を返します。
public
static
Sin x のサイン関数の値を返します。
public
Sqrt x の平方根を計算します。
public
static
Tan x のタンジェント関数の値を返します。
public
ToSInt 整数部を符号つき整数として返します。
public
ToString 文字列に変換して返します。
public
ToUInt 整数部を符号なし整数として返します。
public
Value double 型の値を返します。
public
operator * 乗算を行います。
public
operator+ 加算を行います。
public
operator- 減算を行います。
public
operator/ 除算を行います。
public
operator< 小さい値であるか判定します。
public
operator== 等しい値であるか判定します。
public
operator> 大きい値であるか判定します。

SFUDouble::SFUDouble
SFUDouble クラスのコンストラクタです。
[ public ]
SFUDouble(Void);
[ public ]
SFUDouble(
    double d   // 初期値
);
[ public ]
SFUDouble(
    SIntN n   // 初期値
);
[ public ]
SFUDouble(
    SInt32 n   // 初期値
);
[ public ]
SFUDouble(
    SInt16 n   // 初期値
);
[ public ]
SFUDouble(
    UInt16 n   // 初期値
);
[ public ]
SFUDouble(
    SInt08 n   // 初期値
);
[ public ]
SFUDouble(
    UInt08 n   // 初期値
);
[ public, explicit ]
SFUDouble(
    ConstACharPtr str   // 浮動小数点数に解釈する文字列
);
[ public ]
SFUDouble(
    ConstACharPtr str   // 浮動小数点数に解釈する文字列
    ACharPtr * end      // 解釈できない文字のアドレスを返す
);

解説

デフォルト コンストラクタは、何も初期化を行いません。 したがって、構築後の値は未定義です。

double を引数にとるコンストラクタは、 指定された double 値で初期化を行います。

整数を引数にとるコンストラクタは、 整数を浮動小数点数に変換します。

ConstACharPtr を引数にとるコンストラクタは、 指定された文字列を浮動小数点数を表す文字列として解釈して、 その値で初期化を行います。 文字列が解釈できない場合の結果は未定義です。

str と end を引数にとるコンストラクタは、 BREW API の STRTOD 関数を呼び出して文字列を浮動小数点数に変換し、 その値で初期化を行います。 文字列が解釈できない場合の結果は未定義です。 この関数は BREW 2.1 でのみ使用可能です。

参照

SFUDouble::Value


SFUDouble::Abs
絶対値を返します。
[ public, const ]
SFUDouble Abs(Void);
[ public, static ]
SFUDouble Abs(
    ConstSFUDoubleRef x   
);

SFUDouble::Atan
x のアークタンジェント関数の値を返します。
[ public, static ]
SFUDouble Atan(
    ConstSFUDoubleRef x   
);

参照

SFUDouble::Atan2


SFUDouble::Atan2
y / x のアークタンジェント関数の値を返します。
[ public, static ]
SFUDouble Atan2(
    ConstSFUDoubleRef y   
    ConstSFUDoubleRef x   
);

参照

SFUDouble::Atan


SFUDouble::Ceil
x 以上の最小の整数値を返します。
[ public, const ]
SFUDouble Ceil(Void);
[ public, static ]
SFUDouble Ceil(
    ConstSFUDoubleRef x   
);

使用例

SFUDouble x, y;

x = 5.0;
y = x.Ceil();  // y = 5.0 となります。

x = 5.2;
y = x.Ceil();  // y = 6.0 となります。

x = -5.9;
y = x.Ceil();  // y = -5.0 となります。

x = -6.0;
y = x.Ceil();  // y = -6.0 となります。

参照

SFUDouble::Floor | SFUDouble::Round


SFUDouble::Cos
x のコサイン関数の値を返します。
[ public, static ]
SFUDouble Cos(
    ConstSFUDoubleRef radian                   
    ConstSFUDoubleRef precision = MinValue()   
);

解説

この関数は、マクローリン級数展開によりコサイン関数の近似値を求めます。 級数和の直前の値との差分が指定された漸近精度以下になれば、 計算はそこで打ち切られます。

コサイン関数の計算は時間がかかる処理ですが、 漸近精度を緩めることで高速な計算が可能になります。

使用例

SFUDouble x, e;
SFUDouble pi = SFUDouble::Pi();

// 漸近精度 1.0e-4 の場合は、
// sin(pi/6) の値は 0.8660254451 となります。
e  = 1.0e-4;
x = SFUDouble::Cos(pi / 6.0, e);

// 漸近精度 1.0e-10 の場合は、
// sin(pi/6) の値は 0.8660254038 となり、より正しい値に近づきます。
e  = 1.0e-10;
x = SFUDouble::Cos(pi / 6.0, e);

参照

SFUDouble::Sin


SFUDouble::DegreeToRadian
度をラジアンに変換します。
[ public, static ]
SFUDouble DegreeToRadian(
    ConstSFUDoubleRef degree   
);

使用例

SFUDouble degree = 360.0;
SFUDouble radian = SFUDouble::DegreeToRadian(degree);  // radian = 2 * PI となります。

参照

SFUDouble::RadianToDegree


SFUDouble::Exp
x の指数関数の値を返します。
[ public, const ]
SFUDouble Exp(Void);
[ public, static ]
SFUDouble Exp(
    ConstSFUDoubleRef x   
);

戻り値

オーバーフローした場合の戻り値は未定義です。

参照

SFUDouble::Log | SFUDouble::Log10


SFUDouble::Floor
x 以下の最大の整数値を返します。
[ public, const ]
SFUDouble Floor(Void);
[ public, static ]
SFUDouble Floor(
    ConstSFUDoubleRef x   
);

使用例

SFUDouble x, y;

x = 5.0;
y = x.Floor();  // y = 5.0 となります。

x = 5.2;
y = x.Floor();  // y = 5.0 となります。

x = -5.9;
y = x.Floor();  // y = -6.0 となります。

x = -6.0;
y = x.Floor();  // y = -6.0 となります。

参照

SFUDouble::Ceil | SFUDouble::Round


SFUDouble::IsFinite
有限な値であるか判定します。
[ public, const ]
Bool IsFinite(Void);
[ public, static ]
Bool IsFinite(
    ConstSFUDoubleRef x   
);

戻り値

有限な値であれば真を返します。 そうでなければ偽を返します。

参照

SFUDouble::IsNaN


SFUDouble::IsNaN
非数であるか判定します。
[ public, const ]
Bool IsNaN(Void);
[ public, static ]
Bool IsNaN(
    ConstSFUDoubleRef x   
);

戻り値

非数 (NaN: Not a Number) であれば真を返します。 そうでなければ偽を返します。

参照

SFUDouble::IsFinite


SFUDouble::Log
x の対数関数の値を返します。
[ public, const ]
SFUDouble Log(Void);
[ public, static ]
SFUDouble Log(
    ConstSFUDoubleRef x   
);

戻り値

x が 0 以下の値である場合や、 計算結果がオーバーフローする場合の戻り値は未定義です。

参照

SFUDouble::Exp | SFUDouble::Log10


SFUDouble::Log10
x の 10 を底とする対数関数の値を返します。
[ public, const ]
SFUDouble Log10(Void);
[ public, static ]
SFUDouble Log10(
    ConstSFUDoubleRef    
);

戻り値

x が 0 以下の値である場合や、 計算結果がオーバーフローする場合の戻り値は未定義です。

参照

SFUDouble::Exp | SFUDouble::Log


SFUDouble::MaxValue
double 型で表現可能な正の最大値を返します。
[ public, static ]
SFUDouble MaxValue(Void);

参照

SFUDouble::MinValue


SFUDouble::MinValue
double 型で表現可能な正の最小値を返します。
[ public, static ]
SFUDouble MinValue(Void);

参照

SFUDouble::MaxValue


SFUDouble::Mod
剰余を計算します。
[ public, const ]
SFUDouble Mod(
    ConstSFUDoubleRef y   
);
[ public, static ]
SFUDouble Mod(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);

戻り値

x を y で割った剰余を返します。 x = n * y + f を満たす剰余 fを計算します。 ここで n は整数で、 fx と同じ符号であり、 その絶対値は y の絶対値より小さい値です。 y が 0 の場合の戻り値は未定義です。

使用例

SFUDouble x, y, z;
x = 4.1;
y = 0.6;
z = SFUDouble::Mod(x, y);  // z = 0.5 となります。

x = 3.4;
y = -1.5;
z = SFUDouble::Mod(x, y);  // z = 0.4 となります。

x = -2.9;
y = 2.7;
z = SFUDouble::Mod(x, y);  // z = -0.2 となります。

x = -2.2;
y = -1.5;
z = SFUDouble::Mod(x, y);  // z = -0.7 となります。

SFUDouble::Pi
円周率を返します。
[ public, static ]
SFUDouble Pi(Void);

SFUDouble::Pow
x の y 乗を計算します。
[ public, const ]
SFUDouble Pow(
    ConstSFUDoubleRef y   
);
[ public, static ]
SFUDouble Pow(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);

戻り値

計算結果が実数にならない場合や、 オーバフローする場合の戻り値は未定義です。


SFUDouble::RadianToDegree
ラジアンを度に変換します。
[ public, static ]
SFUDouble RadianToDegree(
    ConstSFUDoubleRef radian   
);

使用例

SFUDouble radian = SFUDouble::Pi() / 2.0;
SFUDouble degree = SFUDouble::RadianToDegree(radian);  // degree = 90.0 となります。

参照

SFUDouble::DegreeToRadian


SFUDouble::Round
最も近い整数に丸めた値を返します。
[ public, const ]
SFUDouble Round(Void);
[ public, static ]
SFUDouble Round(
    ConstSFUDoubleRef x   
);

使用例

SFUDouble d1 = 5.5;
SFUDouble d2 = d1.Round();  // d2 = 6.0 となります。

SFUDouble d3 = -5.4;
SFUDouble d4 = d3.Round();  // d4 = -5.0 となります。

参照

SFUDouble::Ceil | SFUDouble::Floor


SFUDouble::Sin
x のサイン関数の値を返します。
[ public, static ]
SFUDouble Sin(
    ConstSFUDoubleRef radian                   // ラジアン
    ConstSFUDoubleRef precision = MinValue()   // 漸近精度
);

解説

この関数は、マクローリン級数展開によりサイン関数の近似値を求めます。 級数和の直前の値との差分が指定された漸近精度以下になれば、 計算はそこで打ち切られます。

サイン関数の計算は時間がかかる処理ですが、 漸近精度を緩めることで高速な計算が可能になります。

使用例

SFUDouble x, e;
SFUDouble pi = SFUDouble::Pi();

// 漸近精度 1.0e-4 の場合は、
// sin(pi/4) の値は 0.7071064696 となります。
e  = 1.0e-4;
x = SFUDouble::Sin(pi / 4.0, e);

// 漸近精度 1.0e-10 の場合は、
// sin(pi/4) の値は 0.7071067812 となり、より正しい値に近づきます。
e  = 1.0e-10;
x = SFUDouble::Sin(pi / 4.0, e);

参照

SFUDouble::Cos | SFUDouble::Tan


SFUDouble::Sqrt
x の平方根を計算します。
[ public, const ]
SFUDouble Sqrt(Void);
[ public, static ]
SFUDouble Sqrt(
    ConstSFUDoubleRef x   
);

戻り値

x に負の数を指定した場合の戻り値は未定義です。


SFUDouble::Tan
x のタンジェント関数の値を返します。
[ public, static ]
SFUDouble Tan(
    ConstSFUDoubleRef radian                   // ラジアン
    ConstSFUDoubleRef precision = MinValue()   // 漸近精度
);

戻り値

この関数は、 SFUDouble::Sin(radian, precision) / SFUDouble::Cos(radian, precision) を返します。 コサイン値が 0 になる場合や、オーバフローする場合の戻り値は未定義です。

使用例

SFUDouble x, e;
SFUDouble pi = SFUDouble::Pi();

// 漸近精度 1.0e-4 の場合は、
// sin(pi/6) の値は 0.5773507421 となります。
e  = 1.0e-4;
x = SFUDouble::Tan(pi / 6.0, e);

// 漸近精度 1.0e-10 の場合は、
// sin(pi/6) の値は 0.5773502692 となり、より正しい値に近づきます。
e  = 1.0e-10;
x = SFUDouble::Tan(pi / 6.0, e);

参照

SFUDouble::Cos | SFUDouble::Sin


SFUDouble::ToSInt
整数部を符号つき整数として返します。
[ public, const ]
SInt32 ToSInt(Void);
[ public, static ]
SInt32 ToSInt(
    ConstSFUDoubleRef x    
);

戻り値

浮動小数点数の整数部を符号つき整数として返します。 符号は戻り値に反映されます。 浮動小数点数が SInt32 で表現可能な値の範囲外である場合、戻り値は未定義です。

使用例

SFUDouble d = -12.3;
SInt32 n = d.ToSInt();   // n は -12 になります。

参照

SFUDouble::ToUInt


SFUDouble::ToString
文字列に変換して返します。
[ public, const ]
SFUWideString ToString(Void);

戻り値

浮動小数点数を文字列に変換して返します。 変換に失敗した場合は空文字列を返します。


SFUDouble::ToUInt
整数部を符号なし整数として返します。
[ public, const ]
UInt32 ToUInt(Void);
[ public, static ]
UInt32 ToUInt(
    ConstSFUDoubleRef x   
);

戻り値

浮動小数点数の整数部を符号なし整数として返します。 符号は無視されます。 浮動小数点数が UInt32 で表現可能な値の範囲外である場合、戻り値は未定義です。

使用例

SFUDouble d = -24.5;
UInt32 n = d.ToUInt();   // n は 24 になります。

参照

SFUDouble::ToSInt


SFUDouble::Value
double 型の値を返します。
[ public, const ]
double Value(Void);

戻り値

SFUDouble が内部に保持している double 型の値を返します。

参照

SFUDouble::SFUDouble


SFUDouble::operator/
除算を行います。
[ public, friend ]
SFUDouble operator/(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);
[ public ]
ConstSFUDoubleRef operator/=(
    ConstSFUDoubleRef y   // 
);

SFUDouble::operator==
等しい値であるか判定します。
[ public, friend ]
Bool operator==(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);
[ public, friend ]
Bool operator!=(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);

SFUDouble::operator>
大きい値であるか判定します。
[ public, friend ]
Bool operator>(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);
[ public, friend ]
Bool operator>=(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);

SFUDouble::operator<
小さい値であるか判定します。
[ public, friend ]
Bool operator<(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);
[ public, friend ]
Bool operator<=(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);

SFUDouble::operator-
減算を行います。
[ public, friend ]
SFUDouble operator-(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);
[ public ]
ConstSFUDoubleRef operator-=(
    ConstSFUDoubleRef y   
);

SFUDouble::operator *
乗算を行います。
[ public, friend ]
SFUDouble operator *(
    ConstSFUDoubleRef x   
    ConstSFUDoubleRef y   
);
[ public ]
ConstSFUDoubleRef operator *=(
    ConstSFUDoubleRef y   
);

SFUDouble::operator+
加算を行います。
[ public, friend ]
SFUDouble operator+(
    ConstSFUDoubleRef x   // 
    ConstSFUDoubleRef y   // 
);
[ public ]
ConstSFUDoubleRef operator+=(
    ConstSFUDoubleRef y   // 
);