LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a+arg_a) = result_a+state_b
f(state_c+arg_b) = result_b+state_d
Если выкинуть IO, и оставить именно императивное исполнение, то при одинаковом state_a+arg_a функция f всегда будет выдавать result_a+state_b.

Обычно state это не вся память программы, а переданные объекты, в SDL2 есть функция bool SDL_RenderClear(SDL_Renderer *renderer), и по сигнатуре понятно что нужно беспокоиться только о renderer и его внутреннем состоянии, и твои переменные локальные оно не изменит.

В отладчике воспроизвести проблему и в императивном языке просто, есть же дампы.

Я думаю sinf() подвержен внешним настройкам FPU (fenv.h), не смотрел что именно они делают.

Исправление MOPKOBKA, :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a+arg_a) = result_a+state_b
f(state_c+arg_b) = result_b+state_d
Если выкинуть IO, и оставить именно императивное исполнение, то при одинаковом state_a+arg_a функция f всегда будет выдавать result_a+state_b.

Обычно state это не вся память программы, а переданные объекты, в SDL2 есть функция bool SDL_RenderClear(SDL_Renderer *renderer), и по сигнатуре понятно что нужно беспокоиться только о renderer и его внутреннем состоянии, и твои переменные локальные оно не изменит.

В отладчике воспроизвести проблему и в императивном языке просто, есть же дампы.

Я думаю sin подвержен внешним настройкам FPU (fenv.h), не смотрел что именно они делают.

Исправление MOPKOBKA, :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a+arg_a) = result_a+state_b
f(state_c+arg_b) = result_b+state_d
Если выкинуть IO, и оставить именно императивное исполнение, то при одинаковом state_a+arg_a функция f всегда будет выдавать result_a+state_b.

Обычно state это не вся память программы, а переданные объекты, в SDL2 есть функция bool SDL_RenderClear(SDL_Renderer *renderer), и по сигнатуре понятно что нужно беспокоиться только о renderer и его внутреннем состоянии, и твои переменные локальные оно не изменит.

В отладчике воспроизвести проблему и в императивном языке просто, есть же дампы.

Я думаю sin подвержен внешним настройкам FPU, не смотрел что именно они делают.

Исправление MOPKOBKA, :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a+arg_a) = result_a+state_b
f(state_c+arg_b) = result_b+state_d
Если выкинуть IO, и оставить именно императивное исполнение, то при одинаковом state_a+arg_a функция f всегда будет выдавать result_a+state_b.

Обычно state это не вся память программы, а переданные объекты, в SDL2 есть функция bool SDL_RenderClear(SDL_Renderer *renderer), и по сигнатуре понятно что нужно беспокоиться только о renderer и его внутреннем состоянии, и твои переменные локальные оно не изменит.

Я думаю sin подвержен внешним настройкам FPU, не смотрел что именно они делают.

Исправление MOPKOBKA, :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a+arg_a) = result_a+state_b
f(state_c+arg_b) = result_b+state_d
Если выкинуть IO, и оставить именно императивное исполнение, то при одинаковом state_a+arg_a функция f всегда будет выдавать result_a+state_b.

Исправление MOPKOBKA, :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a+arg_a) = result_a+state_b
f(state_c+arg_b) = result_b+state_d

Исходная версия MOPKOBKA, :

Ну так и в императивных языках, если функция f что то изменяет, то нужно ее мысленно представить так:

f(state_a) = result+state_b
f(state_c) = result+state_d