Как сделать на языке паскаль y=lg|arctg(x)-sin(ax)| где x=10^a+cos(a+1) важно

helpppppo helpppppo    2   17.08.2019 23:40    0

Ответы
Milka20060711 Milka20060711  05.10.2020 01:46
1. Современный паскаль

// PascalABC.NET 3.2, сборка 1370 от 24.12.2016
// Внимание! Если программа не работает, обновите версию!

begin
  var a:=ReadReal('a=');
  var x:=power(10,a)+cos(a+1);
  var y:=log10(abs(arctan(x)-sin(a*x)));
  Writeln('x=',x,', y=',y)
end.

Пример
a= 2.105
x=126.35097753811, y=-0.162831822729058

2. Типовой "школьный" паскаль (как не надо учить)

program Vasya;
var
  a,x,y:real;
begin
  Write('a=');
  Read(a);
  x:=exp(a*ln(10))+cos(a+1);
  y:=ln(abs(arctan(x)-sin(a*x)))/ln(10);
  Writeln('x=',x,', y=',y)
end.

Пример
a=2.105
x=126.35097753811, y=-0.162831822729023

3. Сравнение решений
- "школьный" вариант длиннее. Больше текста - дольше писать, больше шансов сделать ошибку.
- результат вычисления y различный. Разница составляет вроде немного - всего 0.000000000000035 (это 0.35×10⁻¹³), но если делать много вычислений, ошибки могут накапливаться.
Вычисленное с более высокой точностью (и округленное до такой же, как в паскале разрядности) значение y равно -0.162831822729052, т.е. "современное" решение оказывается еще и на один порядок точнее. За счет чего? За счет уменьшения ошибок при меньшем количестве вычислений - их сократили функции power  и log10.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика