Каков самый быстрый способ вычислить e ^ x, если x может быть значением с плавающей запятой.
Прямо сейчас я использовал математическую библиотеку Python для вычисления этого, ниже приведен полный код, где result = -0.490631 + 0.774275 * math.exp(0.474907 * sum) - это основная логика, остальное - это код обработки файлов, который требует вопрос.
import math
import sys
def sum_digits(n):
r = 0
while n:
r, n = r + n % 10, n // 10
return r
def _print(string):
fo = open("output.txt", "w+")
fo.write(string)
fo.close()
try:
f = open('input.txt')
except IOError:
_print("error")
sys.exit()
data = f.read()
num = data.split('\n', 1)[0]
try:
val = int(num)
except ValueError:
_print("error")
sys.exit()
sum = sum_digits(int(num))
f.close()
if (sum == 2):
_print("1")
else:
result = -0.490631 + 0.774275 * math.exp(0.474907 * sum)
_print(str(math.ceil(result)))
Значение result — это уравнение кривой (которое является решением задачи программирования), которое я получил из wolfarm-mathematica, используя свой собственный набор данных.
Но это, похоже, не соответствует критериям оценки!
Я также пробовал способ Ньютона-Рафсона, но сходимость для больших x вызывает проблему, кроме этого, вычисление натурального журнала ln(x) снова является проблемой!
У меня нет языковых ограничений, поэтому приемлемо любое решение. Кроме того, если математическая библиотека Python самая быстрая, как говорится в некоторых комментариях, то может ли кто-нибудь дать представление о временной сложности и времени выполнения этой программы, короче говоря, об эффективности программы?
math.expдействительно вычисляет e^x настолько быстро, насколько это возможно (обычно он использует ваш процессор с плавающей запятой, а затем оборачивает результат как число с плавающей запятой Python), но это, конечно, не полный пример (sum— это функция), и мы не не знаю, что терпит неудачу (тест не описан). Тогда ни с того ни с сего возник вопрос о побитовых операциях, которые редко смешиваются с операциями с плавающей запятой. Если у вас есть работающий код, вряд ли это будет тот уровень, на котором может помочь оптимизация. - person Yann Vernier   schedule 07.06.2017result = -0.490631 + 0.774275 * math.exp(0.474907 * sum)- единственная логика, аresult- ответ, так какова временная сложность, я полагаю, O (n), но тогда почему контрольный код помечает его как плохой? - person CMouse   schedule 08.06.2017