時間をサーバと同期させて秒の定義(長い符号なしn_ticks_per_second)を変更してSWRTCを改善しようとしています。uint32_t計算で浮動小数点数に変換する
#include <stdint.h>
#include <stdio.h>
int main(int argc, char * argv[]){
int32_t total_drift_SEC;
int32_t drift_per_sec_TICK;
uint32_t at_update_posix_time = 1491265740;
uint32_t posix_time = 1491265680;
uint32_t last_update_posix_time = 1491251330;
long unsigned n_ticks_per_sec = 1000;
total_drift_SEC = (posix_time - at_update_posix_time);
drift_per_sec_TICK = ((float) total_drift_SEC)/(at_update_posix_time - last_update_posix_time);
n_ticks_per_sec += drift_per_sec_TICK;
printf("Total drift sec %d\r\n", total_drift_SEC);
printf("Drift per sec in ticks %d\r\n", drift_per_sec_TICK);
printf("n_ticks_per_second %lu\r\n", n_ticks_per_sec);
return 0;
}
私は理解していないが、私は最終的に正しい結果を得るために、
フロートに
total_drift_SECをキャストする必要があるということです
、すなわちエンドで1000 n_ticks_per_sec等しいを持っています。
このコードの出力である:
総ドリフト秒-60秒当たり
ドリフトでは、コードの出力に対し0
n_ticks_per_second千
をマダニキャストを浮かべることなく:
総ドリフト秒-60秒当たり
ドリフトので、 "整数" バージョンと298054
n_ticks_per_second 299054
オルタナティブ: 'rift_per_sec_TICK =(1LL * total_drift_SEC)/(at_update_posix_time - last_update_posix_time);' – chux
@chux:または:... '(int64_tの)total_drift_SEC ...'上位その後、 'uint32_t'で署名単に何か。 – alk
@alk '1LL *'やそれに類似したキャストと '1LL *'は型にかかわらず 'total_drift_SEC'を狭めませんが、' total_drift_SEC'が 'double'のような型である場合、 。 – chux