簡體   English   中英

代表time_t之間的差異

[英]Representing the difference between time_t

為什么difftime( time_t t1, time_t t2)方法返回的兩個time_t之間的區別為double 我沒有看到精度要求來自哪里。

因為time_t在標准中簡單地定義為arithmetic type capable of representing timesarithmetic type capable of representing times

這就是關於它的所有內容。 它不必是整數,也不必表示秒。 它只能是十的倍數,或者它可能是一個浮點類型,能夠表示分辨率為10-43秒的時間。

C99 7.23.1 Components of time的引用是(略有釋義):

聲明的類型是clock_ttime_t ,它們是能夠表示時間的算術類型。 clock_t和time_t中可表示的時間范圍和精度是實現定義的。

因此盲目地計算時差的人:

delta = time_end - time_begin;

可能會發現他們的代碼不適用於所有平台。

現在我不知道把我的頭頂部的任何平台的地方不是從紀元簡單秒,但我已經通過假設在此之前被咬傷,比如假設A通過Z是連續的,而事實上,這是對於使用EBCDIC的大型機產品,不需要,也不能很好地工作。 並且,是的,盡管自60年代以來顯然已經死亡,它們仍然處於大量使用狀態:-)

C99理由文件有這樣的說法:

類型clock_ttime_t是算術的,因為根據現有的實踐,這些類型的值必須與-1(“不知道”指示)進行比較,適當地進行比較。

但是,標准沒有定義這些類型的算術屬性,以便允許實現在選擇最適合其預期應用的范圍,精度和表示方面具有最大的靈活性。 表示不必是某個基本單位的計數; 可以想象,實現可以將時間值的不同分量表示為整數類型的子字段。

盡管普遍認為 - 並且實現 - 作為表示自某個時期開始以來的秒的整數類型,但是time_t實際上並未正式定義,因此如果它是time_t則無法使用difftime的結果。 至於其他選擇:在某些情況下int (因為很longlong long而且long long不可移植。

可能是因為它是最通用的算術類型。 如果底層time_t支持它,它允許優於第二精度。

原因是沒有為time_t類型定義算術運算,通過返回double意味着您可以在計算中使用結果。

Iow如果你將兩個time_t值相互添加,你處於不安全的區域,因為如果time_t被定義為unsigned int或普通int,則可能導致不同的行為 - 具體取決於你的平台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM