下崎です。
>ごめんなさい、すみません。
>これも、「メモリの制約がきつい時をのぞいて 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
}
//リスト終了
以下余白