2011-03-22 24 views
12

Bir C++ programım var. Programın bir yerinde (çoğaltılması zor ama çoğaltılabilir) bir topaklaşma, bir NaN'ye ayarlanmış bir yüzdürme arıcılığıyla sonuçlanır. Bir NaN içeren bir kayan nokta işlemi bir NaN ile sonuçlandığından, bu hızlı bir şekilde yayılır.Bir NaN kayan nokta numarası üretildiğinde hata ayıklayıcısını durdurma

Bir kayan nokta işlemi bir NaN ile sonuçlandığında durdurmak için derleyiciyi (gcc 4.4) veya hata ayıklayıcısını (gdb) ayarlayabilmemin herhangi bir yolu var mı? Bu son derece yararlı olur.

Teşekkürler! Nathan

Not: Önemli olabilir: ubuntu linux 10.10 altında çalışıyorum.

+0

sadece ayıklama modunda, nokta özel durumları kayan sağlayabilir üretilmesi durumunda. CRT'nizi kontrol edin, sizinki nasıl yapıldığından emin değil. –

+0

Ayrıca bkz. Http://stackoverflow.com/questions/3615724/how-to-trace-a-nan-in-c – Riot

cevap

15

Sen noktası istisnalar kayan sağlayabilir - glibc Control Functions bakınız - o zaman alırsınız bir SIGFPE sizin NaN değeri

+9

feenableexcept (FE_INVALID | FE_OVERFLOW); Hile mi, teşekkür ederim! – Nathan

+1

Cevap doğru. Ancak, OSX'de bu http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c gibi bir şeye ihtiyacınız vardır çünkü feenableexcept() mevcut değildir. – fferri