Aracılığıyla paylaş


_matherr

Matematik 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.Yoksa _matherr verir 0 ise, bir hata iletisi görüntülenebilir ve errno uygun bir hata değerine ayarlanır.Yoksa _matherr döndüren bir sıfır olmayan bir değer, hiçbir hata iletisi görüntülenir ve errno değişmeden kalır.

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

Notlar

_Matherr işlev kayan nokta math kitaplığı işlevleri tarafından oluşturulan hatalar işler.Bu işlevleri çağırmak _matherr ne zaman bir hata algılandı.

Özel hata işleme için _ farklı bir tanım sağlarmatherr.C çalışma zamanı kitaplığı (Msvcr90.dll) dinamik olarak bağlanmış 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 çalıştırılabilir.Ancak, varsayılan değiştirilemiyor _matherr Msvcr90.dll, DLL istemcisinde rutin.

_ Bir matematik yordamında bir hata oluştuğundamatherr bir işaretçi ile adlı bir _exception yapısı (Math.h içinde tanımlanan) bir 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şlev için bağımsız değişken.

  • çift retval
    İşlev tarafından döndürülen değeri.

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ı bir hata oluştu.

  • _SING
    Bağımsız değişken singularity.

  • _OVERFLOW
    Taşma aralık hatası.

  • _PLOSS
    Anlam kısmi kaybı.

  • _TLOSS
    Anlam kaybı.

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

Yapı üye adı hatası nedeniyle işlev 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 tek bir bağımsız değişken olarak verilen, saklanmasını arg1.)

Varsayılan iade verilen hata değeri retval.Dönüş değeri değiştirirseniz, gerçekten hata olup olmadığını belirlemelisiniz.

Gereksinimler

Yordam

Gerekli başlık

_matherr

<math.h>

Daha fazla uyumluluk bilgisi için Giriş altındaki Uyumluluk bölümüne bakın.

Kitaplıklar

C çalışma zamanı kitaplıklarının çoklu iş parçacığının tüm sürümleri.

Ö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

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Kayan Nokta Desteği

Uzun Çift