У меня есть несколько простых операций (вычитание, умножение) с большими числами (целыми числами). Они настолько велики, что я должен сохранить их в переменной long double
. Это хорошо, но в некоторых случаях умножение теряет точность.
Пример:
A = 84478098072866400.00
B = 419247971803584000000.00
A * B = 35417271278873496315650351919301394432.00
Очевидно, что это неправильно. Результат умножения должен заканчиваться последовательностью нулей.
Мне нужно сохранять точность, особенно эту (когда числа заканчиваются нулями), потому что это наиболее распространенный случай.
Мой вопрос, как это сделать, пожалуйста? Есть ли способ заставить long double
вести себя лучше? Или есть какой-нибудь вариант, как получить точность сохраненного числа?
Большое спасибо!
EDIT:
Я не могу использовать какую-либо внешнюю библиотеку. Я пытаюсь решить одну проблему из архива соревнований ACM. Это часть этого.
Я бы хорошо потерял точность, но я должен ее обнаружить. Когда числа больше long double
, это весьма вероятно (возможно, наверняка), что оно заканчивается длинной последовательностью нулей.