2016-03-30 12 views
0

私はCプログラムを持っており、廃止予定のマシンで使用します。私は基本的な型の互換性に問題があるのを少し怖いです。私は、どうすれば保証されますか?と尋ねると、doubleは8バイトの長さになりますか?答えはC - doubleが8バイトではない場合の対処方法

である「あなたはあなたのコードでこれを置くことができます。

static_assert(sizeof(double) == 8, "invalid double size");" 

[OK]を、私は ...それを得るしかし、私は、コードを実行し、それが行くとき、私は、何をしますか 『の主張は』失敗しましたか?

どうすればこの問題に対処できますか?その特定のマシンでプログラムを実行する必要があります...異なるサイズのプログラムをダブルサイズに適応させるのは難しいですか? PS私のプログラムには8バイト倍数

EDIT:なぜですか8バイトの倍精度 シリアルポートからバイナリ形式のデータをバッファに読み込み、そのバッファから、IEEE754の倍精度と単精度の数値を抽出して、いくつかの計算を行う必要があります。

+0

これも起こりますか? FP命令は失敗するでしょうか? –

+0

Owait - 古代のマシンでは廃止予定のコンパイラでコンパイルしますか? –

+6

これはあまりにも曖昧です。なぜあなたのプログラムは8バイトの 'double 'を必要としますか?高精度タイプを使用できないのはなぜですか?プログラムが固定サイズ/フォーマットに依存するのはなぜですか?あなたのコードがこれに答えるために 'double'をどのように使っているかについてもっと多くのことが必要です。 – chux

答えて

0

8バイトの倍数が必要な理由は、そのようにデータファイルを読み書きしているためです。これをやめて、長いこと考えてください。 「バイナリ」データファイルを読み書きすることは、「簡単で効率的」なので好きなものの1つですが、もちろん不可能です。バイナリデータファイルを曖昧に移植可能にするためにパッチを当てようとすることはできますが、実際にはかなり難しく、その時までには簡単で効率的ではありません。

テキストデータファイルの使用方法が分かりやすい場合は、移植性の問題のすべてが魔法のように消えてしまい、それらのデータファイルについてこれ以上心配する必要はありません。

%aを使用して浮動小数点数をテキストデータファイルに読み書きすることができます。これは、精度と精度を維持するうえで有効です。

+0

いいえ、そうではありませんが、編集を参照してください – Charlestone

0

コードを実行する必要がある特定の種類のマシンとC環境が分かっている場合は、ドキュメントの内容を調べて、その特性がデータ形式と一致するかどうかを判断することができます。もしそうなら、問題はありません。そうでない場合は、FPエミュレーションコードを記述する必要があります。

コードを書く前にこの判断を下せない場合や、ここで違いがある方法でターゲットマシンの特性が変わった場合は、エミュレーションコードを書き込む必要があります。もちろん、どのマシンでもこのようなコードを使用することができます。そこで停止するかもしれません。ただし、ネイティブFPを使用する代替コードパスを提供し、ビルド時(条件付きコンパイルによる)または実行時(FP表現の明示的テストによる)の2つのパスのどちらかを選択することもできます。

関連する問題