c++ - 键入以存储高度精确的小数 < 1
问题描述
我有一个小于 1 的数字需要存储。例如,数字将如下所示:
0.002937595900
我需要保持所有级别的精度(假设最多为 12)。将其存储在 cpp 中的最有效方法是什么?我希望可以使用比使用boost模型/十进制类型更小的东西。
是否有另一种方法可以存储它?
我试图支持的应用程序是存储高达微秒精度的时间,其中数字 1 表示“1 天”,使用 Google 看起来一天有 8.64e+10 微秒,所以大约 1 / 8.64 e+10 精度。
解决方案
这取决于您需要什么样的精度。如果您需要确保数字保持在您想要的值的大约 1 / 2^52 范围内,adouble
是您最好的选择。如果当数字以十进制表示时,您需要精确的精确位数,那么您提到的 boost 类可能是您最好的选择。
给定您的应用程序,我会将值存储在 a 中::std::uint32_t
,并在您需要时将其除以86400000.0
(也就是一天中的微秒数),就像您所说的那样作为缩放数字。当然,::std::uint32_t
您最多只能存储大约 45 天的持续时间。因此,如果它变得更大,并且您仍然需要所有微秒的精度,请将其存储为::std::uint64_t
.
本质上,您会将您的数字视为分母隐含的分数的分子86400000
。
推荐阅读
- terminal - 在另一个目录中删除主目录
- python - Pytorch 嵌入“自身的索引超出范围”
- reactjs - 如何在 Tailwind 和 postcss 中将 Html 内容转换为纯文本
- react-native - 在来电时触发 RNCallKeep.displayIncomingCall() 的最佳方法是什么?
- kubernetes - NodeSelector 不适用于多个节点池?
- c# - 出现滚动条时如何正确应用修改后的 C# WinForm ListBox 边框颜色
- vb.net - 如何进行格式检查?所以输入格式正确。例如 dd/mm/yy。(Visual Basic)
- pandas - 分位数 groupby 熊猫数据框
- javascript - ReactJS中基于创建日期的对象数组的有序显示
- r - Shiny Timevis - 改变行名的位置