目前我有一个函数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
答案 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