2012-03-15 11 views
1

time_tdifftime(time_t t1, time_t t2)メソッドによって返された2つの違いがdoubleの理由は何ですか?私は精度の要求がどこから来るかわかりません。time_tの相違を表す

答えて

2

time_tは、単に標準でarithmetic type capable of representing timesと定義されているためです。

それはそれについてそれについて言うすべてです。整数である必要はなく、秒を表す必要はありません。それは10の倍数にしかなりませんでした。または、1-43秒の分解能まで時間を表すことができる浮動小数点型である可能性があります。 C99 7.23.1 Components of timeから

引用は(わずかに言い換え)である:宣言

タイプの時間を表すことができる算術型でclock_ttime_tです。 clock_tとtime_tで表現可能な時間の範囲と精度は、実装定義です。したがって

盲目的との時間差をうまく人:

delta = time_end - time_begin; 

は、彼らのコードはすべてのプラットフォームで動作しないことがあります。

今、私は、このようなZを通じてAを想定したとして、それはエポックからのシンプル秒ではありませんが、私はこの前にような仮定にかましてきたすべてのプラットフォームは、一方で連続している私の頭の上をオフに知りません実際、それは必須ではなく、EBCDICを使用するメインフレーム製品でうまく動作しません。 clock_ttime_tがある

種類:そして、はい、彼らは明らかに

C99根拠文書は、これは言っている:-) 60年代以来、死にかけていたにも関わらず、重い使用中stillですこれらの型の値は、既存の習慣に従って、時には適切にキャストされた-1(「知らない」指示)と比較されなければならないからです。

しかしながら、これらの型の算術的特性は、意図されたアプリケーションに最も適した範囲、精度、表現を選択する際に最大の柔軟性を実現するために、標準によって定義されています。表現は、基本単位の数である必要はありません。インプリメンテーションは、時間的値の異なる成分を整数型のサブフィールドとして表すと考えられる。実装 - - いくつかのエポックの始めからの秒を表す整数型として、time_tは、実際には正式にそのように定義されていないので、あなたは、移植性の場合difftimeの結果を使用して作ることができなかった普遍的と考えされているにもかかわらず

+0

技術的には、移植性については正しいですが、ほとんどの場合慣れているので、time_tが機能しないプラットフォームを知っていますか? –

+0

偉大な答えは、ありがとう。 – Konrad

+1

@ジョン、私の頭の上からではなく(アップデートを見て)、私はまだ可搬性をできるだけコード化したいと思うだろう。 – paxdiablo

0

タイプtime_tに算術演算が定義されていないため、結果を計算で使用できることを意味するdoubleが返されるためです。

私は、安全でない領域にある2つのtime_tの値をお互いに追加すると、プラットフォームによって、time_tが符号なし整数または通常のintとして定義されている場合に異なる動作が生じる可能性があるためです。

1

それはtime_tでした。その他の選択肢については、intは状況によっては小さすぎます(longなど)。long longは移植性がありません。

1

おそらく最も一般的な算術型であると考えられます。また、基礎となるtime_tがサポートしている場合は、2番目の精度より優れています。