Искаженные результаты, когда значения go превышают порог памяти - PullRequest
1 голос
/ 05 мая 2020

Nb Приведенный ниже код намеренно выполнен без использования библиотеки <math.h>

Nb 1 Ранее я уже задавал другой вопрос об этом коде, но другой вопрос. Это другой вопрос: Аппроксимация e ^ -x не возвращает правильное значение

Чтобы вычислить приближение:

text

Мне нужно работать со следующей формулой:

text

Я просто написал приведенный ниже код, чтобы сделать именно это.

Однако я вижу это, когда пытаюсь с большие значения для k, я начинаю получать неточные результаты. Например, при подключении x=2 и k>=40 для получения значения e^-2 я не вижу правильных результатов, но с x=2 и 12<k<40 все выглядит нормально, и я получаю правильное значение: 0,135335. Я понимаю, что это связано с памятью, выделенной для значений, которые действуют как числитель и знаменатель, но мои вопросы:

  • Максимум, что я могу сделать, чтобы исправить это, - это использовать Long double? И даже тогда, я думаю, снова есть ограничение памяти.
  • Как я могу определить, при каком k значении памяти недостаточно, и результаты начинают становиться неточными? Это сделано для того, чтобы я мог запретить пользователю вводить k значений, которые go превышают этот порог.

1 Ответ

2 голосов
/ 05 мая 2020

По поводу первого вопроса:

Да, long double повысит точность, но также имеет свои пределы. Поэтому, если вам нужна более высокая точность, вам придется реализовать свой собственный тип данных ... (как указано в комментариях)

Второй вопрос Вы можете добавить проверку ограничений, включенных в limits.h

#include <limits.h>
printf("The minimum value of LONG = %ld\n", LONG_MIN);
printf("The maximum value of LONG = %ld\n", LONG_MAX);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...