浮動小数
■ このスレッドは過去ログ倉庫に格納されています
0104デフォルトの名無しさん
NGNG素人が考えた手法です。この手法は、0除算対策には対応していません。
数値を表すクラスを継承した分数クラスを定義する。
privateなフィールド(属性)には整数配列型分母フィールド、整数配列型分子フィールド
を定義する。
コンストラクタは、 分数(long 分子, long 分母)とし、
内部ではこの整数型の数値の一桁一桁の数字を
分割し桁数と同じ長さの整数型配列の中に入れる。
long型で返すget分母(), get分子()メソッドを定義する。
そのクラスに四則演算としてadd(), subtract(), multiply(), divide()メソッド(操作)を用意する。
それぞれのメソッドの戻り値の型は「分数クラス」のスーパークラスである「数値」クラス。
それぞれのメソッドの戻り値は、約分できる値ならできる限り約分された結果をかえす。
割り算など、divide()メソッド内では、
約分などの正規化で割り切れる値以外は実際には割らない。
内部ではあくまで分数で値を保持する。
たとえば、ある分数クラスの二つのオブジェクト(x, y)の中身が a/b、Y c/d であるとき、
数値 x = new 分数(a, b); z = x.divide(y) と計算すると
Z.get分母()で得た値は b * c
Z.get分子()で得た値は a * d となる。
また、数値を文字列表現で返すtoString()メソッドを定義する。
このメソッド内で割り算のアルゴリズムが発動し、
小数点の文字列表現を返す。
■ このスレッドは過去ログ倉庫に格納されています