Как использовать std :: ratio для значений, превышающих int64_t? - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу закодировать солнечную массу как отношение std :: (чтобы преобразовать ее в кг). Как я могу это сделать, если масса Солнца составляет 1,988478e + 30 кг?

std::ratio<(unsigned long long)1'988'478e+30, 1> kg_to_solar_mass // overflow

1 Ответ

0 голосов
/ 15 апреля 2020

64-разрядное целое число без знака (что типичная машина использует для unsigned long long) имеет максимальное значение 18446744073709551615 (1.8446744073709551615e + 19). Это на несколько порядков меньше, чем 1'988'478e + 39 (или даже 1.989e + 30 ) и будет переполнять целое число.

Вы либо будете иметь переключиться на другой тип, который использует double или некоторую библиотеку "Big Int", или не указывать соотношение для одного килограмма к массе Солнца.

...