下崎です。 >ごめんなさい、すみません。 >これも、「メモリの制約がきつい時をのぞいて double」というのは、組み込み >の場合には、必ずしも言えないかもしれません。 > >パソコン(以上)の世界だと 精度・速度ともdouble がお勧めと言い切れる >のですが、そもそも、浮動小数点演算のハードウエアを持っていない場合、 >必ずしも double のほうが良いとは言い切れません。 > >ちょっと先走りでした。 >一応、double という選択肢もある……くらいで良いかと思います。 藤原様、ありがとうございます。 組込系だけでなく、PC系のC言語もマスタしたいと思っていたので参考になりま す。 また、将来H8クラスにも浮動小数点演算ユニットが内臓されるようになったら、 藤原様のおっしゃった様になるのだと思います。 >それにしても、 > >> float a; >> a = 0.1; >> if (a == 0.1) .... >> とした場合、この比較は普通は失敗します。 > >が成功したのはちょっと不思議です。 >「浮動小数点の定数は、float とみなす」 >なんてことになっているのかとも思いますが。 > >上の比較が通るようであれば、float でもOKです。 >パソコン用の代表的な処理系だと失敗するのですけど。 おそらく、藤原様の推測の通りだと思います。 またこの件については、落合様と大崎様のコメントを参考にして実験してみました。 ありがとうございます。 結果はfloat=double=long double=4バイトでした。gccのバージョンが古い可能 性が高いですね。 ちなみに「技術評論社:C言語によるH8マイコンプログラミング入門 初版 第2 86ページ」には、 doubleとlong doubleは8バイトになっていますので、技評社に聞いてみます。(正 誤表には載っていませんでした) //リスト開始 unsigned int fc_dbg1 //0000〜9999の範囲でLCD表示 unsigned int fc_dbg2 //0000〜9999の範囲でLCD表示 unsigned int fc_dbg3 //0000〜9999の範囲でLCD表示 volatile float fc_1; //変数定義 volatile double fc_2; //変数定義 volatile long double fc_3; //変数定義 void test(void) { fc_dbg1 = sizeof(fc_1); //変数サイズ表示 結果=4 fc_dbg2 = sizeof(fc_2); //変数サイズ表示 結果=4 fc_dbg3 = sizeof(fc_3); //変数サイズ表示 結果=4 } //リスト終了 以下余白