John Critter Ответов: 3

У меня есть проблема моделирования, которая нуждается в решении


I need to multiply two partially known numbers where each factor is at 15 decimal places and no less. I'm hoping there is a program that will figure out through permutations or combinations what the zero's in those partially known numbers must be in order to match a 29 decimal place predetermined answer I provide. If this is possible, could a program be written so it can perform this function for 66 rows of completely different 29 decimal place predetermined answers and show what each associated factors are at 15 decimal places? The reason for the specific decimal places both in the factors and the product is to ensure complete accuracy which is crucial for the type of modelling I'm doing.

Пример:

Мой вход---> 0.199848000000000 X 4.974380000000000 = 0.99412293432154732337566954206

Вывод программы --> 0.199848442087413 X 4.974384208042620 = 0.99412293432154732337566954206

Что я уже пробовал:

Я ничего не пробовал, потому что не уверен, что это действительно можно сделать. Кроме того, я должен признать свое невежество и признаться, что ничего не знаю о программировании, но мне действительно нужно решить эту проблему для меня. Простите меня за то, что я иду против политики "не заставлять людей делать за вас вашу работу", но если это сработает так, как я надеюсь, это революционизирует тип моделирования, который я выполняю. Я буду счастлив сослаться на любого, кто поможет с этим в моей статье, на сделки AMS.

3 Ответов

Рейтинг:
1

Richard MacCutchan

Да, программа может быть написана, чтобы дать ответ, но для этого потребуется специальная арифметика. Если ваш язык выбора включает в себя десятичный тип, то вы можете использовать его. Если нет, то вам нужно будет создать свой собственный, что не так сложно, как кажется. Не пытайтесь использовать поплавковые или двойные типы, так как они имеют тенденцию довольно быстро терять точность.


Рейтинг:
0

Patrice T

Цитата:
Я не уверен, что это действительно возможно сделать.

Это можно сделать.
Возможны многие подходы.
Мой подход состоял бы в том, чтобы масштабировать числа до тех пор, пока они все не станут целыми числами, а затем использовать большие целые числа. Потому что целочисленная арифметика быстрее, чем с плавающей запятой, и большие целые числа очень распространены на сегодняшний день.
0.199848000000000 X 4.974380000000000 = ‭0.99412293432154732337566954206
 1.99848000000000 X 49.74380000000000 = ‭ 99.412293432154732337566954206
 19.9848000000000 X 497.4380000000000 = ‭ 9941.2293432154732337566954206
 199.848000000000 X 4974.380000000000 = ‭ 994122.93432154732337566954206
 1998.48000000000 X 49743.80000000000 = ‭ 99412293.432154732337566954206
 199848.000000000 X 497438.0000000000 = ‭ 9941229343.2154732337566954206
...
 1998480000000000 X 4974380000000000 = ‭ 994122934321547323375669542060

затем решите P и Q в
(1998480000000000 + P) X (4974380000000000 + Q) = 994122934321547323375669542060
Я бы попытался разложить на множители 994122934321547323375669542060
994122934321547323375669542060 = 2^2 × 3^4 × 5 × 7^3 × 103 × 63577 × 69203 × 3947923974637
Цитата:
Я должен признать свое невежество и признаться, что ничего не знаю о программировании, но мне действительно нужно решить эту проблему для меня.

Вам были даны общие рекомендации, потому что это то, что можно сделать в рамках этого форума.
Написание эффективного кода для этой задачи-настоящая работа, потому что нужно провести реальное исследование, чтобы избежать ловушек, и это требует времени.


Рейтинг:
0

k5054

Вы вероятно хотите посмотреть на GNU MPFR Multi Precision Floating point с правильным округлением [^], или другая библиотека, которая выполняет математику произвольной точности.