首页 > 解决方案 > 键入以存储高度精确的小数 < 1

问题描述

我有一个小于 1 的数字需要存储。例如,数字将如下所示:

0.002937595900

我需要保持所有级别的精度(假设最多为 12)。将其存储在 cpp 中的最有效方法是什么?我希望可以使用比使用boost模型/十进制类型更小的东西。

是否有另一种方法可以存储它?

我试图支持的应用程序是存储高达微秒精度的时间,其中数字 1 表示“1 天”,使用 Google 看起来一天有 8.64e+10 微秒,所以大约 1 / 8.64 e+10 精度。

标签: c++

解决方案


这取决于您需要什么样的精度。如果您需要确保数字保持在您想要的值的大约 1 / 2^52 范围内,adouble是您最好的选择。如果当数字以十进制表示时,您需要精确的精确位数,那么您提到的 boost 类可能是您最好的选择。

给定您的应用程序,我会将值存储在 a 中::std::uint32_t,并在您需要时将其除以86400000.0(也就是一天中的微秒数),就像您所说的那样作为缩放数字。当然,::std::uint32_t您最多只能存储大约 45 天的持续时间。因此,如果它变得更大,并且您仍然需要所有微秒的精度,请将其存储为::std::uint64_t.

本质上,您会将您的数字视为分母隐含的分数的分子86400000


推荐阅读