如何将 std::ratio 用于大于 int64_t 的值?
Posted
技术标签:
【中文标题】如何将 std::ratio 用于大于 int64_t 的值?【英文标题】:How to use std::ratio for values larger than int64_t? 【发布时间】:2020-04-15 17:11:08 【问题描述】:我想将太阳质量编码为 std::ratio(以便将其转换为 kg)。 如果太阳质量是 1.988478e+30 kg,我该怎么做呢?
std::ratio<(unsigned long long)1'988'478e+30, 1> kg_to_solar_mass // overflow
【问题讨论】:
为什么不直接使用double
?无论如何,你只知道最多 7 位有效数字的太阳质量。
ratio 使用 intmax_t 作为其模板
我的意思是,如果你只使用double
,你就不需要std::ratio
。
谢谢,但简单的double
不是强类型。我想要的实际上是std::ratio
for double
s,
【参考方案1】:
64 位无符号整数(典型的机器用于unsigned long long
)的最大值为 18446744073709551615 (1.8446744073709551615e+19)。这比 1'988'478e+39(甚至 1.989e+30)小几个数量级,并且会溢出整数。
您要么必须切换到使用双精度或某些“Big Int”库的不同类型,要么不指定一公斤与太阳质量的比率。
【讨论】:
以上是关于如何将 std::ratio 用于大于 int64_t 的值?的主要内容,如果未能解决你的问题,请参考以下文章
你如何将一个非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time
如何在 Swift Int64 中使用 Core Data Integer 64?
如果 NSDecimalNumber 大于 Uint64,如何将 NSDecimalNumber 转换为字节数组?