将存储在int64_t中的系统时钟(微秒)转换为float(s)?

时间:2011-10-12 05:23:15

标签: c++ c

目前我有一个函数f(),它以微秒为单位返回当前系统时钟。我需要将其转换为秒,保留小数点后的几位数。我想将结果存储在一个浮点数(它足够长吗?)。

但是f()返回的是一个int64_t变量;我尝试了很多方法,比如:

(double)(f() / 1000000) + (double)((f() % 1000000) / (double)1000000);

f() / 100000.f

但我实际上看起来像“1318395904.000000”。

更新:

我想要做的是计算我的程序的FPS。似乎把它转换成第二个是一个坏主意。我重写了这样的程序,两种方法都运行良好:

(PS,av_gettime()是我提到的函数f()。)

std::cout << "Yoooooo FPS: " << (float)5000000 / (float)(av_gettime() - prevFrameShowTime)
          << std::endl;
std::cout << "Current FPS: " << (double)5000000 / (double)(av_gettime() - prevFrameShowTime)
          << std::endl;

这是输出:

Yoooooo FPS: 60.623
Current FPS: 60.6097

4 个答案:

答案 0 :(得分:4)

您的浮点数(假设IEEE-754)为尾数23位,您希望如何在不丢失精度的情况下存储64位值?

(您显示的值需要31位才能存储整秒,您的精度仅为最接近的128秒)

答案 1 :(得分:2)

典型的32位浮点数将为您提供大约七位有效数字的精度。所有有效数字都被整个部分使用。你需要使用双倍。

答案 2 :(得分:1)

首先将其转换为double,然后除以:

double result = (double) f() / 1000000.0;

顺便说一句,是的,我会将结果存储在double这里,而不是float

答案 3 :(得分:1)

你会失去一些精确度,但这应该有效:

(double) f() / 1000000