[H8-ML(4644)] RE: [H8-ML(4632)] これも訂正です( Re: H8/3052で浮動小数点演算がうまくできず困っています。)
From: "Shimozaki Kenichi" <shimozaki@xxxxxxxxxxxxxxx>
Date: 2004年04月09日(金)10時04分11秒
下崎です。



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




以下余白


スレッド概略
[4619(R)](起点)
 └[4632(U)]
   └[表示中]
     └[4652(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]