我想在不丢失 C 精度的情况下进行以下计算。
uint64_t ts_1 = 0x5212cb03ca115ac0;
uint64_t ts_2 = 0x5212cb03ca115cc0;
uint64_t ts_delta = (ts_2 - ts_1)
double scale_factor = ts_delta/(2^32)
我得到 ts_delta 的值,0x200.
但是 scale_factor 的值是 。15.000000
基本上我在计算过程中失去了精度。
如何在不丢失精度的情况下做到这一点。?
这是一个关于我如何尝试打印的简短自包含示例。
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main()
{
uint64_t ts_1 = 0x5212cb03ca115ac0;
uint64_t ts_2 = 0x5212cb03ca115cc0;
uint64_t ts_delta = (ts_2 - ts_1);
double scale_factor = ((double)ts_delta) / (((uint64_t)1) << 32);
printf("ts_delta %"PRIx64" scale factor %f \n",ts_delta,scale_factor);
return 0;
}