Aracılığıyla paylaş


_matherr

Math hataları işleme.

int _matherr(
   struct _exception *except 
);

Parametreler

  • dışında
    Hata bilgisi içeren yapısı için işaretçi.

Dönüş Değeri

_matherr bir hata ya da başarılı olduğunu belirtmek için sıfır olmayan bir değer belirtmek için 0 değerini döndürür. _Matherr döndürür 0, bir hata iletisi görüntülenebilir ve errno uygun hata değerine ayarlanır. _Matherr sıfır dışında bir değere hiçbir hata iletisi görüntüleniyor verir ve errno değişmeden kalır.

Dönüş kodları hakkında daha fazla bilgi için bkz: _doserrno, errno, _sys_errlist ve _sys_nerr.

Notlar

_Matherr işlevi işlediğinde math kitaplığı kayan nokta işlevleri tarafından oluşturulan hatalar. Bu işlevlerini çağıran _matherr bir hata algılandığında.

Özel hata işleme için _ farklı bir tanım sağlayabilirmatherr. c çalışma zamanı kitaplığı (Msvcr90.dll) dinamik olarak bağlı sürümünü kullanıyorsanız, değiştirebileceğiniz varsayılan _matherr rutin bir istemcideki bir kullanıcı tanımlı sürüm ile yürütülebilir. Ancak, varsayılan değiştirilemiyor _matherr Msvcr90.dll, dll istemcisinde rutin.

_ Bir matematik yordamında bir hata ortaya çıktığındamatherr bir işaretçi ile adlı bir _exception (Math.h içinde tanımlanmıştır) yapısı bağımsız değişken olarak yazın. _Exception yapısı aşağıdaki öğeleri içerir.

  • int türü
    Özel durum türü.

  • CHAR * adı
    Hatanın oluştuğu işlevin adı.

  • çift arg1, arg2
    Birinci ve ikinci (varsa) işlevinin bağımsız değişkenleri.

  • çift retval
    İşlevi tarafından döndürülecek değer.

Türü matematik hata türünü belirtir. Math.h içinde tanımlanan aşağıdaki değerlerden biridir.

  • _DOMAIN
    Bağımsız değişken etki alanı hata oluştu.

  • _SING
    Singularity bağımsız değişkeni.

  • _OVERFLOW
    Taşma aralık hatası.

  • _PLOSS
    Kısmi anlam kaybı.

  • _TLOSS
    Anlam kaybı.

  • _UNDERFLOW
    Sonuç gösterilemeyecek kadar küçüktür. (Bu durum şu anda desteklenmiyor.)

Yapı üye ad hataya işlevin adını içeren bir boşlukla sonlandırılmış dize bir işaretçidir. Yapı üyeleri arg1 ve arg2 hataya neden olan değerleri belirtin. (Yalnızca bir bağımsız değişken olarak verilen, içinde saklandığı arg1.)

Varsayılan dönüş değeri için verilen bir hata retval. Dönüş değeri değiştirirseniz, hata gerçekten gerçekleşip belirtmeniz gerekir.

Gereksinimler

Yordamı

Gerekli başlık

_matherr

<math.h>

Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.

Kitaplıkları

Tüm sürümleri c çalışma zamanı kitaplıkları.

Örnek

// 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 */
}

Çıktı

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 Eşdeğeri

Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

Kayan nokta türü desteği

Uzun çift