floatについて

「floatについて」の編集履歴(バックアップ)一覧はこちら

floatについて」(2012/03/31 (土) 21:34:06) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

普通に使って良いです。 #include <float.h> #include <math.h> void main(void){ float a; a=sqrtf(2); } > sdcc -mz80 --code-loc 0x100 --data-loc 0x100 --no-std-crt0 source.c sdccの関数は通常のCライブラリ関数に対してfloatのfを追加した関数名となる。 通常のCで、sqrt()は、sqrtf()となる。同様にsin()はsinf()である。 floatの変数をprintf()で表示しないのであればこの方法で良い。 この時にリンクされるmath.hやfloat.h関連関数はz80.libで、コンパイラが特別にリンカ指定 しない際にデフォルトでリンクされるz80.libライブラリを参照する。 z80.libに含まれるprintf()はputchar()を用いており、putchar()はコンパイラデフォルトで RST08hを呼ぶ。DOS用のCONOUT処理を行なわないので、printf()やputs()は独自のライブラリを 使う必要があるだろう。 printf()はデフォルトではfloatに対応していないので"%f"の書式は<NO FLOAT>と表示される。 しかしprintf()ソースには"%f"書式らしきコードが書かれているのでライブラリのprint_large.c ソースビルドの際にマクロなどオプションを指定するとfloat対応printf()が出来るかもしれない。 sdccではfloat型をサポートするがdouble型はサポートしない。 floatは4byteのIEEE754形式で実数を表現する。 -ソースコードのビルドの際の注意 floatやmathライブラリをソースから再ビルドする際に注意することは、BOOL型とMakefileが無いこと。 BOOLについては適切に定義されていないので、sdccのincludeにあるstdbool.hを以下のようにし Define BOOLの行を_Boolからcharに要修正。 これでコンパイルは通る。 stdbool.h #else /* The ports that have bool */ //#define bool _Bool #define BOOL char #define __bool_true_false_are_defined 1 #endif Makefileはないのでビルドの際は適当にバッチファイルを使えば良い。 ソースはC言語で書かれているものと、Z80用のアセンブラで書かれているものがある。 float関連のライブラリはアセンブラで書かれたlong型の掛け算やシフト処理 ライブラリを参照しているので ライブラリのビルドの際は両方とも必須。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。