Автор |
Тема: Плавающая ошибка (Прочитано 2523 раз) |
|
Tupitsin
Я люблю этот Форум!
Просмотреть Профиль | E-мэйл
Сообщений: 191
|
on 07.07.06 в 12:25:58, Alexander,Kiev wrote: Не думается, что кто то умышленно пытается передавать значение ч/з глобальную переменную, которая на самом деле глобальная достаточно условно. |
| Никто не говорит об умышленной передаче значений. Это классическая ошибка инициализации, которая описывается в учебниках по методике программирования.
|
|
Зарегистрирован |
|
|
|
Alexander_Kiev
Просмотреть Профиль | E-мэйл
Сообщений: 661
|
on 07.07.06 в 13:00:17, Tupitsin wrote: Никто не говорит об умышленной передаче значений. Это классическая ошибка инициализации, которая описывается в учебниках по методике программирования. |
| Чет я не понял, где здесь ошибка инициализации? Переменная V1 после перезаписи контекста инициализирована нулем во второй операции.
|
« Изменён в : 07.07.06 в 15:17:22 пользователем: Alexander_Kiev » |
Зарегистрирован |
С уважением, Александр.
|
|
|
Tupitsin
Я люблю этот Форум!
Просмотреть Профиль | E-мэйл
Сообщений: 191
|
Ошибка заключается в том, что программист должен был написать строчку V1=0 (если нужен 0) или V1=$ (если нужна сумма операции). А программист забыл и не написал такую строчку, т.е. не инициализировал переменную V1 перед использованием. Поэтому значение переменной V1, вообще говоря, не определено. Это и есть ошибка.
|
« Изменён в : 07.07.06 в 16:08:09 пользователем: Tupitsin » |
Зарегистрирован |
|
|
|
Alexander_Kiev
Просмотреть Профиль | E-мэйл
Сообщений: 661
|
on 07.07.06 в 16:06:05, Tupitsin wrote:Ошибка заключается в том, что программист должен был написать строчку.... |
| Отсутствие инициализации дает непрогнозируемый результат, ошибки выполнения быть не должно. Беру таймаут, надо немного вспомнить.
|
|
Зарегистрирован |
С уважением, Александр.
|
|
|
Tupitsin
Я люблю этот Форум!
Просмотреть Профиль | E-мэйл
Сообщений: 191
|
А я и не сказал, что это ошибка выполнения. Это ошибка программиста. Это он не заинициализировал переменную.
|
« Изменён в : 07.07.06 в 17:53:13 пользователем: Tupitsin » |
Зарегистрирован |
|
|
|
Alexander_Kiev
Просмотреть Профиль | E-мэйл
Сообщений: 661
|
on 07.07.06 в 17:47:28, Tupitsin wrote:А я и не сказал, что это ошибка выполнения. Это ошибка программиста. |
| И ошибка копмиляции и времени выполнения - ошибки программера Поигрался на всяк случай, чтоб убедится. Переменные живут на время перерасчета, с контекстами это не связано. Полностью согласен, что изначальное сообщение может быть связано с данным фактом. Считать переменные перерасчета глобальными таки не стоит, так же как и не стоит забывать обратное. Для одной фазы перерасчета они глобальны, для разных инициализированы нулями Не сразу дошло, зачем такой алгоритм с сэтами с extra.e приведен. Достаточно в ф/к первого месяца дать V1=5, второго V2=25/V1. Вторая операция регистрируется, но баланс загибается, а после перерасчета с начала года работает как ни в чем не бывало. Также и при редакции.
|
« Изменён в : 07.07.06 в 19:08:49 пользователем: Alexander_Kiev » |
Зарегистрирован |
С уважением, Александр.
|
|
|
Aleksey
Я люблю этот Форум!
Просмотреть Профиль |
Сообщений: 133
|
Но ведь в моем файле-коэффициенте переменная VR каждый раз рассчитывается, а не записывается в параметр. Попробую перед формулой разместить VR=0. Странно все же, что с правом P у пользователей никогда не возникало ошибок.
|
|
Зарегистрирован |
|
|
|
Tupitsin
Я люблю этот Форум!
Просмотреть Профиль | E-мэйл
Сообщений: 191
|
А разве переменная VR у Вас единственная переменная в ф/к-ах? Кроме того, если переменной присваивается значение где-то во вложенных блоках if..else..endif, то может попасться сочетание, которое не предусмотрено проверками. Например: if A=0 X =1 elseif A>0 X =2 endif Здесь пропущена проверка на A<0 Лучший способ избежать этого - присвоить значение "по умолчанию" до всех проверок. В предыдущем примере X =0 ПЕРЕД первым if.
|
|
Зарегистрирован |
|
|
|
Alexander_Kiev
Просмотреть Профиль | E-мэйл
Сообщений: 661
|
on 10.07.06 в 10:26:57, Aleksey wrote:Но ведь в моем файле-коэффициенте переменная VR каждый раз рассчитывается, а не записывается в параметр. Попробую перед формулой разместить VR=0. Странно все же, что с правом P у пользователей никогда не возникало ошибок. |
| Если есть уверенность что переменная всегда имеет присваение в ф/к, то конечно делать предварительную инициализацию не нужно. Но как правильно замечено, может иметь место наведенная ошибка. Вот еще вариант: VR присваивается всегда, а в расчете или позже модифицируется с участием переменной VX, которая может инициализироваться не гарантировано. Это все лиш предположения, никто ведь не видел, как у вас это реализовано. Хотя, ф/к приведен (ужо упустил из виду). Это действующий фрагмент? P.S. VR= [EP $D, 1]- [EP $D, 4]- [EP $D, 5]+ [EP $D, 2] Ну вот, как можно гарантировать, что комбинация суммы параметров не даст ошибку в свете приведенных выше причин.
|
« Изменён в : 10.07.06 в 12:51:30 пользователем: Alexander_Kiev » |
Зарегистрирован |
С уважением, Александр.
|
|
|
Aleksey
Я люблю этот Форум!
Просмотреть Профиль |
Сообщений: 133
|
on 10.07.06 в 12:32:13, Alexander,Kiev wrote: Хотя, ф/к приведен (ужо упустил из виду). Это действующий фрагмент? P.S. VR= [EP $D, 1]- [EP $D, 4]- [EP $D, 5]+ [EP $D, 2] Ну вот, как можно гарантировать, что комбинация суммы параметров не даст ошибку в свете приведенных выше причин. |
| Да, это и есть тот самый фрагмент. Не представляю, что может быть, чтобы сумма параметров дала какую-то ошибку. Tupitsin Вот как раз Ifов никаких нет.
|
|
Зарегистрирован |
|
|
|
Alexander_Kiev
Просмотреть Профиль | E-мэйл
Сообщений: 661
|
on 10.07.06 в 13:51:38, Aleksey wrote: Да, это и есть тот самый фрагмент. Не представляю, что может быть, чтобы сумма параметров дала какую-то ошибку. |
| Да, ну не ошибку, а непрогнозируемое значение. Надо бы проанализировать как формируются значения всех участвующих параметров во всех ф/к. У вас это может быть и простая зависимость, но мы то этого не знаем. Учитывая, что "справедливость" востанавливается после перасчета предыдущего месяца, причина таки в неучтенной инициализации до этого места.
|
« Изменён в : 10.07.06 в 14:25:40 пользователем: Alexander_Kiev » |
Зарегистрирован |
С уважением, Александр.
|
|
|
|
|