如何将 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 doubles, 【参考方案1】:

64 位无符号整数(典型的机器用于unsigned long long)的最大值为 18446744073709551615 (1.8446744073709551615e+19)。这比 1'988'478e+39(甚至 1.989e+30)小几个数量级,并且会溢出整数。

您要么必须切换到使用双精度或某些“Big Int”库的不同类型,要么不指定一公斤与太阳质量的比率。

【讨论】:

以上是关于如何将 std::ratio 用于大于 int64_t 的值?的主要内容,如果未能解决你的问题,请参考以下文章

golangaddint64作用

你如何将一个非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time

如何在 Swift Int64 中使用 Core Data Integer 64?

如果 NSDecimalNumber 大于 Uint64,如何将 NSDecimalNumber 转换为字节数组?

如何将数据类型更改为 float64 以便 sklearn 可以处理数据大于 np.float32 的数据帧

如何在 ruby​​ 中解压缩大于 64 位的数字?