質問
time_t
メソッドから戻った2つのdifftime( time_t t1, time_t t2)
の違いがdouble
としての違いはなぜですか。精度の要件がどこから来たのかわかりません。
解決
time_t
は単にarithmetic type capable of representing times
としての標準で定義されています。
それはそれについて言うすべてについてです。整数である必要はありませんが、秒を表す必要はありません。それは10の倍数であることができないか、またはそれは10 -43 秒の解像度までの時間を表すことができる浮動小数点タイプであり得る。
C99 7.23.1 Components of time
からの引用は(わずかに差し引かれて):
宣言されたタイプは
clock_t
とtime_t
です。これは時間を表すことができる算術型です。 Clock_TとTIME_Tで表される時間の範囲と精度は実装定義されています。
それ故に盲目的に時間の違いを解決する人々:
delta = time_end - time_begin;
.
自分のコードがすべてのプラットフォームで機能しないことがわかります。
今すぐ私の頭の上に知らないが、エポック以来シンプルな秒ではないプラットフォームではなく、のようなのようなのように噛み合っていますが、A
を介してZ
は連続していますが、実際には必須ではなく、EBCDICを使用するメインフレーム製品ではうまく機能しません。そして、はい、彼らはまだ heavy 「60年代」以来、明らかに死んでいたにもかかわらず使用
C99根拠文書にはこれが言うべきことがあります:
型のタイプのタイプは、既存の慣行に従って、既存の慣習に従って、-1(「知らない」指示)、適切にキャストされている場合に、これらのタイプの値は算術演算です。
これらのタイプの算術特性は、実装を実装を可能にするために、範囲、正確化、およびそれらの意図されたアプリケーションに最も適した表現を選択することを可能にするために、標準によって定義されています。表現はいくつかの基本単位の数である必要はありません。実装は、整数型のサブフィールドとしての時間値の異なる成分を考えている可能性がある。
他のヒント
いくつかのEpochの始まりから秒を表す積分タイプとして、秒を表す整数型として考えられているにもかかわらず、一般的に正式に定義されていないので、それが完全に定義されていないため、DIFFTIMEの結果を携帯可能に使用することができませんでした。time_t
。他の選択肢については:time_t
が小さすぎます(int
と同様)、long
はポータブルではありません。
おそらく最も一般的な算術型だからです。そして、基礎となるtime_t
がそれをサポートしている場合は、2番目の精度よりも優れています。
これの理由は、計算結果を使用できることを意味する2倍にすることで、型time_t
の算術演算がないためです。
iow互いにtime_t
値を追加すると、TIME_Tが符号なしintまたは通常のintとして定義されている場合は、動作が生じない、またはプラットフォームに応じて通常のintまたは通常のIntが発生する可能性があります。