|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
|
|
Как отловить +/-INF и NAN?02.01.2017, 05:42. Показов 9903. Ответов 5
Метки нет (Все метки)
Здравствуйте.
Проблема в возникновении в ходе вычислений указанных в заголовке значений. Причем трагизм ситуации в том, что после начала работы программы до ошибки проходит около часа. Есть ли возможность как-то сделать так, чтобы программа останавливалась как только в произведенных вычислениях встречаются эти значения (и чтобы останавливалась на строчке с ошибкой)? Вариант создать свой тип double, где бы происходила проверка каждой операции не катит, поскольку этот час растянется на сутки.
0
|
|
| 02.01.2017, 05:42 | |
|
Ответы с готовыми решениями:
5
Расчётная функция #0 вернула значение NaN/Inf Доказать равенство inf{x+y}=inf{x}+inf{y} Считать с файла in.inf число и вывести в out.inf его, умноженное на 2 |
| 02.01.2017, 06:43 | |
|
0
|
|
|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
|
|
| 02.01.2017, 06:59 [ТС] | |
|
zer0mail, по ссылке, опять же, функции. Хотелось бы что-то типа _matherr для функций math.h, чтобы не городить ничего нового
0
|
|
| 02.01.2017, 07:20 | |
|
В гугле забанили? Вот, например http://www.avprog.narod.ru/progs/exceptions.htm
1
|
|
|
|
||
| 02.01.2017, 12:00 | ||
|
Под линуксом есть возможность вызывать сигнал по некоторым вещественным ситуациям https://linux.die.net/man/3/feenableexcept Но тут проблема такая, что во-первых нет уверенности, что всё это на 100% поддерживается (т.к. мешает оптимизациям), а во-вторых скорее всего тут не весь спектр возможностей, в результате которых может родиться inf/nan C #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #define _GNU_SOURCE #include <fenv.h> void handler (int param) { printf ("handler\n"); exit (0); } double d1 = 1.0, d2 = 0.0, d3; int main() { struct sigaction act; memset (&act, 0, sizeof (act)); act.sa_handler = handler; sigemptyset (&act.sa_mask); sigaction (SIGFPE, &act, NULL); printf ("point1\n"); /* По умолчанию деление на ноль отработает */ d3 = d1 / d2; printf ("point2\n"); /* А здесь прилетит сигнал */ feenableexcept (FE_DIVBYZERO); d3 = d1 / d2; printf ("point3\n"); return 0; } Code $ gcc t.c -lm $ ./a.out point1 point2 handler В постах #4 и #5 представлены методы, которые ловят аппаратные прерывания. Программная обёртка для них разная, но внутренние кишки одинаковые (в разных системах пошли разными путями). Но эти методы не поймают ситуаций, когда inf/nan рожаются программно. Например, при вычислении корня из отрицательного числа в функции sqrt делается проверка аргумента, если он меньше нуля, то просто возвращается nan. Т.е. nan сгенерировался программно, а не аппаратно, как-то я сильно сомневаюсь, что подобную ситуацию можно поймать. Только если в функции sqrt разработчики для получения nan'а воткнули явную операцию, которая вырабатывает nan аппаратно и взводит соответствующие флаги в процессоре
2
|
||
|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
|
|||
| 02.01.2017, 15:44 [ТС] | |||
|
Пока не пробовал, но, думаю, функции _controlfp или signal могут помочь. И да, забыл написать, RAD STUDIO - может лучше бы даже в разделе про билдер стоило мне писать. Добавлено через 8 минут p.p.s. И да, Windows
0
|
|||
| 02.01.2017, 15:44 | |
|
Помогаю со студенческими работами здесь
6
Как вернуть NaN и Infinity, проверить на NaN и Infinity? При создании службы INF‑файлом ошибка: выбранный INF файл не поддерживает этого метода установки Как реализована Double.NaN != Double.NaN Раскрытие неопределенности inf/inf
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|