[英]Representing the difference between time_t
為什么difftime( time_t t1, time_t t2)
方法返回的兩個time_t
之間的區別為double
? 我沒有看到精度要求來自哪里。
因為time_t
在標准中簡單地定義為arithmetic type capable of representing times
的arithmetic type capable of representing times
。
這就是關於它的所有內容。 它不必是整數,也不必表示秒。 它只能是十的倍數,或者它可能是一個浮點類型,能夠表示分辨率為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的大型機產品,不需要,也不能很好地工作。 並且,是的,盡管自60年代以來顯然已經死亡,它們仍然處於大量使用狀態:-)
C99理由文件有這樣的說法:
類型
clock_t
和time_t
是算術的,因為根據現有的實踐,這些類型的值必須與-1(“不知道”指示)進行比較,適當地進行比較。但是,標准沒有定義這些類型的算術屬性,以便允許實現在選擇最適合其預期應用的范圍,精度和表示方面具有最大的靈活性。 表示不必是某個基本單位的計數; 可以想象,實現可以將時間值的不同分量表示為整數類型的子字段。
盡管普遍認為 - 並且實現 - 作為表示自某個時期開始以來的秒的整數類型,但是time_t
實際上並未正式定義,因此如果它是time_t
則無法使用difftime的結果。 至於其他選擇:在某些情況下int
(因為很long
) long long
而且long long
不可移植。
可能是因為它是最通用的算術類型。 如果底層time_t
支持它,它允許優於第二精度。
原因是沒有為time_t
類型定義算術運算,通過返回double意味着您可以在計算中使用結果。
Iow如果你將兩個time_t
值相互添加,你處於不安全的區域,因為如果time_t被定義為unsigned int或普通int,則可能導致不同的行為 - 具體取決於你的平台。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.