Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Деление на ноль, взявшееся непонятно откуда

1.8K
14 декабря 2007 года
Валериус
190 / / 14.07.2006
Пишу арккосинус через ряд Тейлора. Написал, кажется, верно, считает с точностью до 4-5 знака, но время от времени возникает Run-time Error 200: Division by zero. Главная непонятка - откуда? У меня всего одно деление, причём знаменатель очевидно возрастает. Исходники во вложении.

P.S. Если это важно, компилятор FreePascal под Linux.
5.3K
14 декабря 2007 года
Somebody
185 / / 24.12.2006
А ты сам хотя бы пытался искать ошибку?
Здесь происходит переполнение denominator'а (2 в 32-й степени равно нулю). Для таких вещей longint'а маловато. Если сделать всё что есть extended'ом, то переполнения не будет. Ну и, конечно, при 0.999 о точности можно и не говорить…
1.8K
16 декабря 2007 года
Валериус
190 / / 14.07.2006
Somebody, точно, помогло!
А разве на переполнение нет своего кода ошибки?
5.3K
17 декабря 2007 года
Somebody
185 / / 24.12.2006
Цитата: Валериус
А разве на переполнение нет своего кода ошибки?


Есть ошибка 215. Но, если бы всегда проверялись переполнения и выходы за границы массивов, всё бы сильно тормозило. Поэтому по умолчанию эти проверки отключены. Чтобы включить проверку переполнения (не распространяется на inc/dec), надо в начале программы написать {$Q+}, проверку на выход за границы массива - {$R+}. Можно вместе {$R+,Q+}. Только когда много расчётов, тормоза заметны.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог