syncSlave for problem 2
Embed:
(wiki syntax)
Show/hide line numbers
hdtimeval_math.cpp
00001 #include "hdtimeval_math.h" 00002 00003 void hdtv_add (hdtimeval_t * r, hdtimeval_t * v1, hdtimeval_t * v2) 00004 { 00005 r->tv_sec = v1->tv_sec + v2->tv_sec; 00006 r->ticks = v1->ticks + v2->ticks; 00007 if (r->ticks >= MAX_TICK) { 00008 r->tv_sec++; 00009 r->ticks -= MAX_TICK; 00010 } 00011 } 00012 00013 void hdtv_div2 (hdtimeval_t * r, hdtimeval_t * v) 00014 { 00015 if (v->tv_sec & 0x1) { 00016 r->ticks = ((v->ticks+MAX_TICK)>>1); 00017 } else { 00018 r->ticks = (v->ticks>>1); 00019 } 00020 r->tv_sec = (v->tv_sec>>1); 00021 } 00022 00023 void hdtv_div8 (hdtimeval_t * r, hdtimeval_t * v) 00024 { 00025 r->ticks = ((v->ticks+MAX_TICK*(v->tv_sec & 0x7))>>3); 00026 r->tv_sec = (v->tv_sec>>3); 00027 } 00028 00029 void hdtv_sub (hdtimeval_t * r, hdtimeval_t * v1, hdtimeval_t * v2) 00030 { 00031 r->tv_sec = v1->tv_sec - v2->tv_sec; 00032 if (v1->ticks < v2->ticks) { 00033 r->ticks = MAX_TICK + v1->ticks - v2->ticks; 00034 r->tv_sec --; 00035 } else { 00036 r->ticks = v1->ticks - v2->ticks; 00037 } 00038 } 00039 00040 void hdtv_muldiv (hdtimeval_t * r, hdtimeval_t * v, hdtimeval_t * m, hdtimeval_t * d) 00041 { 00042 double dblm, dbld, factor, rsec, rticks; 00043 uint32_t irticks, c; 00044 int32_t irsec; 00045 00046 dblm = (double)(m->tv_sec) * (double)MAX_TICK + (double)(m->ticks); 00047 dbld = (double)(d->tv_sec) * (double)MAX_TICK + (double)(d->ticks); 00048 factor = dblm / dbld; 00049 00050 rsec = (double)(v->tv_sec) * factor; 00051 rticks = (double)(v->ticks) * factor + (rsec - floor(rsec)) * (double)MAX_TICK; 00052 irticks = (uint32_t)rticks; 00053 irsec = (int32_t)rsec; 00054 c = irticks / MAX_TICK; 00055 r->tv_sec = irsec + c; 00056 r->ticks = irticks - c * MAX_TICK; 00057 } 00058 00059 void hdtv_totv(timeval_t * r, hdtimeval_t * v) 00060 { 00061 r->tv_sec = v->tv_sec; 00062 r->tv_usec = (v->ticks + 48)/96; 00063 if (r->tv_usec >= 1000000) { 00064 r->tv_sec ++; 00065 r->tv_usec -= 1000000; 00066 } 00067 }
Generated on Thu Jul 28 2022 23:22:05 by
1.7.2