- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
type func = function (x : real) : real;
const
eps = 0.0000003;
pi = 3.14159265358979;
function Integral (f : func; a, b : real) : real;
var center : real;
begin
center := (a + b) / 2;
if abs(b - a) < eps then
Integral := f(center) * (b - a)
else Integral := Integral(f, a, center) +
Integral(f, center, b);
end;
function myFunc(x : real) : real;
begin
myFunc := cos(x) / x;
end;
begin
writeln(Integral(myFunc, pi/2, pi));
readln;
end.
inkanus-gray 02.11.2014 02:44 # +1
bormand 02.11.2014 07:51 # 0
absolut 02.11.2014 10:35 # −2
bormand 02.11.2014 10:46 # +1
Нехуй. Пускай запускают коконсольные проги как положено.
3.14159265 02.11.2014 13:23 # −1
Soul_re@ver 02.11.2014 14:05 # +1
inkanus-gray 03.11.2014 01:49 # +1
1024-- 03.11.2014 05:38 # 0
> Говорят, что иначе воняет сильно.
По-моему, это наоборот хорошо: сразу видно, что вывела программа именно сейчас, а не три запуска назад, когда студент ещё не исправил баг.
Пожалейте преподавателей. И так постоянно надо переключать контекст, а Вы ещё и логи фильтровать заставляете.
Тут как раз можно плавно и естественно подвести к дебаг/релиз версиям . В c/c++ можно сразу писать
kipar 03.11.2014 15:46 # 0
1024-- 03.11.2014 15:53 # 0
P.S. Что-то внезапно решил проверить комментарии на ГК. Открыл страницу за несколько секунд до того, как пришло письмо.
someone 02.11.2014 10:45 # +2
> дурачек
Нет, я подозреваю, что вы и есть школьник. Ещё не дошли до тех классов, в которых проходят правописание частиц и о-ё после шипящих.
TarasB 02.11.2014 13:54 # −1
inkanus-gray 02.11.2014 15:58 # −1
Подсказка: (pi - pi/2) / 0.0000003 = 5 мильонов.
TarasB 02.11.2014 16:47 # −1
inkanus-gray 02.11.2014 17:16 # −1
Каждый такой вызов сохраняет в стеке 2 × (адрес возврата + значение (E)BP + три параметра вызова + локальную переменную center).
Если лабы пишут по старинке в 16-битном ТП, то у нас в стеке максимум 64 килобайта. Вызов функции Integral сожрёт 4 + 2 + (4 + 6 + 6) + 6 = 28 байт (хотя я не помню, выравнивается ли real, нужно сконпелировать и проверить). Стека хватит на какую-то жалкую тысячу точек, но не на миллионы.
bormand 02.11.2014 17:27 # +2
Да, стека хватит. Глубина рекурсии будет всего 22-23.
inkanus-gray 02.11.2014 17:47 # −1
Выхлоп:
Ну да, стека действительно хватает. Что-то я разбежался...
TarasB 02.11.2014 19:37 # +3
inkanus-gray 02.11.2014 20:15 # −2
Но в любом случае здесь много ненужных прыжков и умножений. Тормозить же будет.
TarasB 02.11.2014 22:48 # 0
А ты видимо предлагаешь тупо взять ЭН равномерно взятых точек и тупо сложить, но "простая" схема не позволяет вовремя остановиться, эн надо взять заренее. А ещё "простая" схема уязвима для плавающего питуха, потому что когда ты будет прибавлять последний эпсилон к миллионной сумме предыдущих чисел, то у тебя будет ну ты понел.
inkanus-gray 02.11.2014 23:08 # 0
TarasB 02.11.2014 23:53 # +1
По-прежнему в силе защита от плавающего питуха.
guest 03.11.2014 00:19 # −2
inkanus-gray 03.11.2014 00:22 # −1
guest 03.11.2014 00:25 # −2
guest 03.11.2014 00:26 # −1
inkanus-gray 03.11.2014 04:09 # 0
defecate-plusplus 03.11.2014 05:34 # 0
используя два сумматора
TarasB 04.11.2014 00:55 # 0
короче. такой рекурсией проще и не намного менее надёжно
guest 04.11.2014 13:55 # 0
guest 03.11.2014 00:27 # −1
guest 04.11.2014 13:57 # 0
guest 04.11.2014 19:09 # 0
LinuxGovno 25.08.2021 05:53 # 0