2015-12-24 5 views
6

difftime()はなぜdoubleを返しますか? <a href="http://man7.org/linux/man-pages/man3/difftime.3.html" rel="nofollow">difftime()'s man page</a>から

double difftime(time_t time1, time_t time0);

difftime()関数はdoubleとして表さ 時間time1と時間time0との間に経過した秒数を返します。

'秒数'は浮動小数点数を必要としないので、なぜこの関数はdoubleを返しますか?

+0

:http://stackoverflow.com/q/13855890/827263 –

答えて

4

このdocumentation点の詳細は​​明らかである:POSIXシステムで

、のtime_tは秒単位で測定し、difftimeは、算術減算と等価であるが、CおよびC++のtime_tのための小数部を許可されています。

POSIX requires time_t to be an integer typeただし、POSIX以外のシステムでは、小数点以下の秒数が返される可能性があります。

+1

標準では、time_tには次のようなことが書かれています: '算術(C11まで)実数(C11以降)の型を表現できる型'。 – Zaxter

+0

@ user3490458:はい、しかし、POSIXは特に 'time_t'を整数型にする必要があります。 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html –

+0

@KeithThompsonはい、それは確かにポイントでした。 –

5

Cでは、時間を表すためにさまざまなスカラー数(整数、浮動小数点数)が使用できます。それはする必要がある「...時間を表すことができる本当の種類」C11§7.27.13、

範囲とclock_t and time_tで表現倍の精度が 実装定義です。 doubleが得られるようにC11dr§7.27.14

2つのtime_t値の差は、広い範囲及び精度を変化させます。

OP、「 '秒数' は浮動小数点数を必要としないので、なぜこの関数はdoubleを返すのですか?


[編集]のLinux/POSIXは、使用しない場合があります秒のフラクションが、他のシステムがそうdoubleを選択し、その秒の整数蓄積ならびに他のOSの実装を収容difftime()定義C規格を行っている関連

関連する問題

 関連する問題