Hateman31
@Hateman31
Делиться мыслями - это круто!

PascalABC.NET не считает логарифм

В лабе нужно вычислить логарифм.
Пользуюсь функцией из базовой библиотеки Ln.
Как аргумент передаю 1( в переменной).
Выводит: -1.11022302462516E-16.

Что делать?
  • Вопрос задан
  • 3190 просмотров
Решения вопроса 1
@deleted-Ari100teLL
       Скорей всего он просто выдал тебе приближенное значение и нужно его округлить, потому что в переменной у тебя хранится не 1.
       Еще раз проверь что у тебя хранится в переменной, если не поможет, то скинь код программы я посмотрю.
       К примеру приведенный ниже код выдает 0
var i: double;
begin
  i:=1;
  writeln(Ln(i));	
end.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@deleted-Ari100teLL
Все наконец разобрался!!!

       Там возникает небольшая погрешность при вычислении тангенса:
( так значение Pi константа и равно в стандартной библиотеке PABCSystem Pi = 3.141592653589793)
n1 + n2 = 0.785398163397448;
tan(n1 + n2)=1.0000...
9849602_bigthumb.jpg 9849637_bigthumb.jpg
       Скорей всего именно поэтому в результате вычисления значения логарифма, мы получаем приближенное значение 0,0000000000000001...
       Я думаю что такая погрешность является вполне нормальной...

P. S.
       Сразу же отвечаю на твой коммент: "понимаю, говнокод, но это лаба просто))" советую сразу на лабах качать скилы по написанию хорошего кода, хотя код и не особо плохой.
Cпасибо за внимание и успехов в учебе!
Ответ написан
Hateman31
@Hateman31 Автор вопроса
Делиться мыслями - это круто!
///Возвращает интеграл
function Integral(var x: integer; n: integer): real;
var
  tng, temp: real;
  n1, n2: real;
begin
  if n = 1 then
  begin
    n1 := (Pi / 4);
    n2 := (x / 2);
    tng := tan(n1 + n2);
    temp := ln(tng);
    integral := temp;
    //компилятор неверно считает логарифм!!!
  end;
  if n = 0 then
    
    integral := x;
  if n >= 2 then
    integral := ((1 / n - 1) * (sin(x)) / power(cos(x), n - 1)) + (((n - 2) / (n - 1)) * integral(x, n - 2))
else
  
  
end;

//Разобраться со ссылками на параметры

var
  x: integer;
  n: integer;

begin
  writeln('read(x)');
  read(x);
  writeln('readln(n)');
  readln(n);
  
  //writeln('Интеграл dx/(cos', x, ')^', n, '=', integral(x, n));
end.


Там задача простая. Интеграл посчитать. Кажется, если подать n=1, то он должен выдать логарифм, а так как для теста я выбрал значения x=0 n=1, то программа должна вернуть 0, но....увы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы