私の目標は、タイムスタンプをナノ秒の範囲で保存することです。正確にタスクが実行される時間に通信する必要がある2台のマシンがあるとしましょう。
質問のために、それらが同期されたクロックであるとしましょう。
マシンAは、完了時に現地時間を保存します。マシンBはAに送信し、その時点で送信が行われます。次に、マシンAが差を計算します。
私の問題は、時差が実際には最大60秒になる可能性があることですが、最大0.25ミリ秒になることもあります。したがって、両方を処理できるように時間を保存し、時間差を計算する必要があります。
ナノ秒単位のエポックからの時間は非常に大きいので、私が知っている変数にそれを格納することはできないと思います。
この状況にどのように取り組みますか?私の現在のところ、私はおそらく(どういうわけか)エポックからの時間をns単位で1分を表すビットに縮小することができますが、それを行う方法はわかりません。
あなたが助けることができることを願っています。
宜しくお願いします
int64_t
符号付き(uint64_t
)または符号なし()の64ビット整数を使用するだけで、すべて問題ありません。
64ビットスペースは本当に巨大です。時間差を保存するだけでなく、1970-01-01の深夜から経過した時間として通常測定される絶対時間値を保存するだけでも十分です。
たとえば、現在、1970-01-01からの秒数はおおよそ次のとおりです。
1492432621.123456789
ナノ秒単位で、これは次のとおりです。
1492432621123456789
比較のために、最大の符号付き64ビット整数値は次のとおりです。
9223372036854775807
これはおおよそ2262-04-12に対応します。これは、ほぼ確実にもう生きていない日付です。
ただし、ソフトウェアが2世紀以上実行され、その間に改善されず、最終的にクラッシュする可能性が依然として懸念される場合は、符号なし64ビット整数を使用する必要があります。何世紀にもわたって、またはあなたは宇宙が死ぬまでほぼ確実に安全である128ビット整数を使うべきです。128ビット整数はすべての最新の64ビットアーキテクチャ(__int128
またはunsigned __int128
)でサポートされているため、もちろんレガシー32ビットシステムをサポートする必要がない限り、安全に使用できます。または16ビットシステム。8ビット、誰か?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加