Поделиться через


_matherr

Математические обработки ошибок.

int _matherr(
   struct _exception *except 
);

Параметры

  • except
    Указатель на структуру, содержащую сведения об ошибке.

Возвращаемое значение

_matherr возвращает 0 для указания ошибки или ненулевое значение, чтобы указать успех.Если, _matherr возвращает значение 0, а сообщение об ошибке может отображаться errno набор определяется соответствующим значением ошибки.Если, _matherr возвращает ненулевое значение, не отображается сообщение об ошибке и errno остается неизменным.

Дополнительные сведения о кодах возврата см. _doserrno, errno, _sys_errlist и _sys_nerr.

Заметки

_matherr ошибки процессов функции, созданные функциями библиотеки math с плавающей запятой._Вызова этих функцийmatherr при обнаружении ошибки.

Для особой обработки ошибок, можно предоставить другое определение _matherr.Если используются динамически связанную версию библиотеки времени выполнения c (Msvcr90.dll), можно заменить по умолчанию, _matherr подпрограмма в исполняемый файл клиента с определяемыми пользователем версии.Однако нельзя заменить значения по умолчанию _matherr подпрограмма в клиенте библиотеки DLL Msvcr90.dll.

При возникновении ошибки в процедуре math, _matherr вызывает с указателем на _exception введите структура (), указанная в Math.h в качестве аргумента._exception структура содержит следующие элементы.

  • тип int
    Тип исключения.

  • *name char
    Имя функции, в которой произошла ошибка.

  • arg1 double" аргумент2
    Первого и второго (если таковые имеются), аргументы функции.

  • двойное retval
    Значение, которое будет возвращать функция.

тип математические определяющее тип ошибки.Она одно из следующих значений определяется в Math.h.

  • _DOMAIN
    Ошибка домена аргумента.

  • _SING
    Сингулярность аргумента.

  • _OVERFLOW
    Ошибка диапазона переполнения.

  • _PLOSS
    Частично потеря значимости.

  • _TLOSS
    Полная потеря значимости.

  • _UNDERFLOW
    Результат слишком мал, представленным.(Это условие в настоящее время не поддерживается.)

Элемент структуры Имя указатель на null-завершенной строку, содержащую имя функции, вызвавшей ошибку.Члены структуры arg1 и аргумент2 укажите значения, вызвавшего ошибку.(Если только один аргумент указан, он хранится внутри arg1.)

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

Требования

Процедура

Обязательный заголовок

_matherr

<math.h>

Дополнительные сведения о совместимости см. Совместимость во введении.

Библиотеки

Все версии Библиотеки времени выполнения C.

Пример

// crt_matherr.c
/* illustrates writing an error routine for math 
 * functions. The error function must be:
 *      _matherr
 */

#include <math.h>
#include <string.h>
#include <stdio.h>

int main()
{
    /* Do several math operations that cause errors. The _matherr
     * routine handles _DOMAIN errors, but lets the system handle
     * other errors normally.
     */
    printf( "log( -2.0 ) = %e\n", log( -2.0 ) );
    printf( "log10( -5.0 ) = %e\n", log10( -5.0 ) );
    printf( "log( 0.0 ) = %e\n", log( 0.0 ) );
}

/* Handle several math errors caused by passing a negative argument
 * to log or log10 (_DOMAIN errors). When this happens, _matherr
 * returns the natural or base-10 logarithm of the absolute value
 * of the argument and suppresses the usual error message.
 */
int _matherr( struct _exception *except )
{
    /* Handle _DOMAIN errors for log or log10. */
    if( except->type == _DOMAIN )
    {
        if( strcmp( except->name, "log" ) == 0 )
        {
            except->retval = log( -(except->arg1) );
            printf( "Special: using absolute value: %s: _DOMAIN "
                     "error\n", except->name );
            return 1;
        }
        else if( strcmp( except->name, "log10" ) == 0 )
        {
            except->retval = log10( -(except->arg1) );
            printf( "Special: using absolute value: %s: _DOMAIN "
                     "error\n", except->name );
            return 1;
        }
    }
    printf( "Normal: " );
    return 0;    /* Else use the default actions */
}

Output

Special: using absolute value: log: _DOMAIN error
log( -2.0 ) = 6.931472e-001
Special: using absolute value: log10: _DOMAIN error
log10( -5.0 ) = 6.989700e-001
Normal: log( 0.0 ) = -1.#INF00e+000

Эквивалент в .NET Framework

Неприменимо. Для c# используйте стандартная функция PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Поддержка чисел с плавающей запятой

Long double