締切済み

最大値に依存した処理の選択について

  • 困ってます
  • 質問No.9570184
  • 閲覧数146
  • ありがとう数2
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 49% (292/589)

実数型の変数がa,b,c,d,e,fの6つがあり、その6つの内で例えば、bが一番大きいならば、こうする、というような処理を考えています(たいした問題ではないように見えます)。一番大きいものを選びだすことは簡単です。それをxとします。しかし、a,b,c,d,e,fのどれなのかわかりません。そこで、xとa,b,c,d,e,fを比べていき一致したら”それ”と決定できるのですが、2つの実数間で一致を照合するというのにまずさを感じています。なお、同じものがあったらどうするかという問題はあまり気にしません。先に見つかった方でいいのです。それは見つける順番で工夫できます。2つの実数の一致を検出するのは問題ないのでしょうか。みつからないというのが問題なのですが。当方は科学計算なのでフォートランなのですが、考え方が分かれば別言語の方法でも参考になるので考え方についてよろしくお願いします。そういう意味で処理系に依存した方法でないことを所望しますが。

回答 (全5件)

  • 回答No.5

ベストアンサー率 19% (338/1717)

単純に
if( b >=a && b >= c && b >= d && b >=e && b >= f ){
ここに処理
}
という書き方もあります。言語はCです。変数の数が数個で固定で、判定しなくてはならないケースも数種類であるなら、これでもいいと思います。

セオリー通りなら、皆さんおっしゃるように、配列を使って、インデックスを保存する。
また、実数の比較に関しては、計算されたものに誤差が生じるということであって、代入されたものの比較には問題がないというのは先の方のおっしゃる通りです。
たいせつな将来のこと。あえて、知らない人に聞いてみよう。
  • 回答No.4

ベストアンサー率 62% (407/654)

何らかの計算を行った結果と、別の値を比較する場合、誤差の影響で一致しない可能性があります。

例)
double a, b;
a = 0.1;
b = 0.01;
if (a*a==b) {
printf("OK");
}
↑これは"OK"と表示されるとは限らない。

ただし、単なる代入の場合であれば、誤差の影響はないので、比較しても問題ありません。元々の数値に誤差が含まれる場合(例えば、ソース上で"0.01"と記述しても、実際には0.01ぴったりの値が表現できない、など)であっても、それは代入元の変数も代入先の変数も同じなので、内部データは一致しています。

例)
double a,b;
a = 0.01;
b = a;
if (a==b) {
printf("OK");
}
↑"OK"と表示される

どうしても心配なのであれば、各変数と最大値との差の絶対値を計算し、最小のものを採用すれば間違いないです。
  • 回答No.3

ベストアンサー率 50% (1227/2417)

コンピューター カテゴリマスター
もう一つの案というかアルゴリズム
data[0]={0,a};
data[1]={1,b};
data[2]={2,c};
data[3]={3,d};
と、2重配列にしてしまい、
それ事ソートしてしまう!
例えば"d"が一番大きかった場合にソートした結果は
data[0]={3,d};
となっていれば、「3」番だったのね!とすぐわかります!。
  • 回答No.2

ベストアンサー率 50% (1227/2417)

コンピューター カテゴリマスター
abcdef の配列があるなら、それのINDEX用の配列を
012345 を作成して、シャッフルするのはこっち!
どの言語でも同じですが。
data[0]=a;data[1]=b;data[2]=c;以下略
それと
index[0]=0;index[1]=1;index[2]=2;以下略
を用意
その場合のxは
x=data [ index [ y ] ];
で読み取るようにして、
バブルソートを、indexで行えば、あなたが欲しい最大値の
場所は、あくまで変わらないので、
index [ y ] が一番大きい数/またはソートにより一番小さい数
として求められます。
OKOK?
  • 回答No.1

ベストアンサー率 46% (545/1183)

a~f じゃなく、配列 v[0]~v[5] にデータを持っておけばいい。
こいつから最大値を持つ添え字:indexを求める。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ