SSブログ

実数の剰余 [日記]

「2つのデータが整数倍かどうかの判定をするんだってさ」
「整数倍ってどうやって判定するんだっけ?」
「割り算をやって“余り”が“0”になれば整数倍だ」
「でもこのデータは実数だけど、実数で余りって計算できるんだっけ?」
「う~ん……」
「…………」

いや、別に“余り”が計算できなくっても、本来の目的が整数倍かどうかの判定なんだから、普通に割り算して結果が整数かどうか判定したら良いんじゃないかと思ったり思わなかったり。

それは兎も角

実数の割り算で、「余り」って何だろう……。

とりあえず、プログラムを書いて確認して見ることにしました。
言語はC++。

#include <iostrem>

int main()
{
    const double a = 7.4;
    const double b = 1.2;

    std::cout << (a % b) << std::endl;

    return 0;
}

コンパイルエラーになりました。
実数の剰余は、定義されていないのだろうか……。

とりあえず、割り算の基本に帰る事にします。

A ÷ B = C 余り D

この時の割り算の定義は、

A = B × C + D

Cは整数
0 ≦ D < B

なんとなく、実数の剰余らしきものが計算できそうな気がしてきました。

C = A ÷ Bの整数部分
D = A - B × C

7.4 ÷ 1.2 を例にして考えて見ます。

7.4 ÷ 1.2 = 6.1666...
なので、商は6

7.4 - 1.2 × 6 = 0.2
で、余りは0.2

ということで、良いのかな?

Wikipediaによると

割り切れない場合にも、剰余の概念を導入して除法を整数全体での演算に拡張することができる。

と書いてあって、余りは整数のための概念っぽいので、いくらそれっぽい値が計算できても、結局は未定義なのかもしれませんが。

ちなみに、上記のソースコードと同じようなものをJavaで書いてみたら、ちゃんと余りが0.2と計算できました。

どれが正しいのだろう……

[飛行機] 今日の一冊
東京大学殺人事件

東京大学殺人事件

  • 作者: 佐藤 亜有子
  • 出版社/メーカー: 河出書房新社
  • 発売日: 1999/04
  • メディア: 単行本


nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

m11m

math.hに実数の剰余を計算するfmod()という関数があります。
by m11m (2010-04-25 03:02) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

時代を先取りJavascriptの配列 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。