- ベストアンサー
if文で「配列a[i]が小数ならば」を表現したい
if文で「配列a[i]が小数ならば」を表現したいのですが、どうしたらよいのか分かりません。 if(????){ 配列a[i]には、整数や0、そして小数が入っています。 どうぞご教授いただければ幸いです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
aの型がdoubleとして if(a[i] != (double)(int)a[i]){ というのが自然ではあるのですが、内部表現上の誤差でうまくいかないケースもでてくると予想されます やろうとしているケースにもよりますが小数部分がある値より小さい時という判定にしなければならないかもしれません
その他の回答 (6)
- graphaffine
- ベストアンサー率23% (55/232)
okweb_doctorさん、今晩は。 単に配列と書いていますが、浮動小数点型の配列ですよね。私の知りうる範囲(多分、狭い範囲だと思いますが)では、一旦、浮動小数点型に入れた後では、どうしようもないと思います。従って、入れるとき、或いはその前に何らかの付加情報が必要になりそうです。 その理由は、#2の方が仰るように浮動小数点の誤差です。 ついでに、#6 >小数って「数のうち、整数ではないもの」だよね。 は違います。数学的或いはプログラミング的には小数は実数とも言い、整数を含みます。従って、質問者の言い方も >「配列a[i]が小数ならば」 でなく、 「配列a[i]が整数でない小数ならば」が正しいでしょう。
- Trick--x--
- ベストアンサー率26% (19/72)
#蛇足 質問者ではないが To #5さん えっと……何かおかしい? そりゃ正確には「配列aの要素a[i]が~」だが、そこは問題じゃないんでしょ? 小数って「数のうち、整数ではないもの」だよね。 0 < x < 1 は「0より大きく1未満の数」だよね。 2.3とか-0.001も小数だよね。 何が引っかかるんでしょ
- ___noboru___
- ベストアンサー率28% (33/117)
> 「配列a[i]が小数ならば」 「少数ならば」って何ですか? (日本語が変な感じしますが)。 もしや数学的な書き方するならば 0 < a[i] < 1 のことですか? だとすると if (a[i] > 0.0 && a[i] < 1.0) { ... } でできます。
- jacta
- ベストアンサー率26% (845/3158)
何をもって整数とするかにもよりますが(おかしな表現ですが、概ね誤差をどう扱うかの意味です)、標準ライブラリに下駄を預けるなら、 double i; if (modf(a[i], &i) != 0.0) { /* 小数 */ } かと思います。
- Chronos198
- ベストアンサー率30% (105/349)
#include <math.h> if(fmod(a,1) != 0 ) { // 小数 } else { // 整数 } で実装出来そうです。
- Trick--x--
- ベストアンサー率26% (19/72)
数xの小数点以下を切り捨て、xから引くとどうなる?
お礼
私の日本ごがおかしくてご迷惑おかけしました。 5や9などではなく、2.56や0.64や12.8などの小数部分を含む数でした。 みなさまありがとうございましたm(_)m