Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Matematik hatalarını işler.
Sözdizimi
int _matherr(struct _exception *except);
Parametreler
except
Hata bilgilerini içeren yapıya yönelik işaretçi.
Dönüş değeri
_matherr hata belirtmek için 0 veya başarıyı göstermek için sıfır olmayan bir değer döndürür:
- 0 döndürürse
_matherr, bir hata iletisi görüntülenebilir veerrnouygun bir hata değerine ayarlanır. - Sıfır olmayan bir değer döndürürse
_matherr, hiçbir hata iletisi görüntülenmez veerrnodeğişmeden kalır.
İade kodları hakkında daha fazla bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.
Açıklamalar
İşlev, _matherr matematik kitaplığının kayan nokta işlevleri tarafından oluşturulan hataları işler. Bir hata algılandığında bu işlevler çağrılır _matherr . Bu etkileşim, derleyicinin kayan nokta modundan veya kayan nokta denetim sözcüğünden etkilenmez. Bir _matherr kitaplık işlevi olduğundan, matematik iç işlevleri bunu çağırmaz.
Özel hata işleme için farklı bir tanımı _matherrsağlayabilirsiniz. C çalışma zamanı kitaplığının (CRT) dinamik olarak bağlı sürümünü kullanıyorsanız, istemci yürütülebilir dosyasındaki varsayılan _matherr yordamı kullanıcı tanımlı bir sürümle değiştirebilirsiniz. Ancak, CRT DLL'nin DLL istemcisinde varsayılan _matherr yordamı değiştiremezsiniz.
Matematik yordamında bir hata oluştuğunda, _matherr bağımsız değişken olarak bir _exception tür yapısına (içinde <math.h>tanımlanan) bir işaretçiyle çağrılır. Yapı _exception aşağıdaki öğeleri içerir.
struct _exception
{
int type; // exception type - see below
char* name; // name of function where error occurred
double arg1; // first argument to function
double arg2; // second argument (if any) to function
double retval; // value to be returned by function
};
Üye type matematik hatasının türünü belirtir. bu, içinde <math.h>tanımlanan aşağıdaki değerlerden biridir:
| Makro | Açıklama |
|---|---|
_DOMAIN |
Bağımsız değişken etki alanı hatası |
_SING |
Bağımsız değişken tekilliği |
_OVERFLOW |
Taşma aralığı hatası |
_PLOSS |
Kısmi anlam kaybı |
_TLOSS |
Toplam anlam kaybı |
_UNDERFLOW |
Sonuç, temsil edilemeyecek kadar küçük. (Bu koşul şu anda desteklenmiyor.) |
Yapı üyesi name , hataya neden olan işlevin adını içeren null ile sonlandırılan bir dizenin işaretçisidir. Yapı üyeleri arg1 ve arg2 hataya neden olan değerleri belirtin. Yalnızca bir bağımsız değişken verilirse, içinde arg1depolanır.
Verilen hata için varsayılan dönüş değeri olur retval. Dönüş değerini değiştirirseniz, hatanın gerçekten oluşup oluşmadığını belirtmelidir.
Gereksinimler
| Yordam | Gerekli başlık |
|---|---|
_matherr |
<math.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
/* crt_matherr.c
* Illustrates writing an error routine for math
* functions.
* The error handling function must be named _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 */
}
Special: using absolute value: log: _DOMAIN error
log( -2.0 ) = 6.931472e-01
Special: using absolute value: log10: _DOMAIN error
log10( -5.0 ) = 6.989700e-01
Normal: log( 0.0 ) = -inf