実数の剰余 [日記]
「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と計算できました。
どれが正しいのだろう……
今日の一冊 | |
|
2009-04-19 09:16
nice!(0)
コメント(1)
トラックバック(0)
math.hに実数の剰余を計算するfmod()という関数があります。
by m11m (2010-04-25 03:02)