Тестирование для плавающего NaN приводит к переполнению стека
C #, VS 2010
Мне нужно определить, является ли значение с плавающей точкой NaN.
Тестирование поплавка для NaN с помощью
float.IsNaN(aFloatNumber)
вылетает с переполнением стека.
Так же
aFloatNumber.CompareTo(float.NaN).
Следующее не дает сбоя, но это бесполезно, так как возвращает NaN независимо от:
aFloatNumber - float.NaN
Поиск по «переполнению стека» возвращает результаты об этом веб-сайте, а не результаты о фактическом переполнении стека, поэтому я не могу найти соответствующие ответы.
Почему мое приложение переполняется стеком при тестировании на NaN?
Изменить: стек вызовов:
Изменить: это явно что-то в моем коде: это утверждение:
bool aaa = float.IsNaN(float.NaN);
работает нормально в конструкторе приложения, сразу после InitializeComponent ();работает нормально в конструкторе класса для пользовательского элемента управления, сразу после InitializeComponent ();но вылетает в обработчике событий внутри класса для пользовательского элемента управления.Итак, вот что я делаю:
Аннотация Пользовательский элемент управления: открытый абстрактный частичный класс ConfigNumberBaseBox: TextBoxимеет обработчик события Validating ValidateTextBoxEntryValidateTextBoxEntry определяется внутри класса ConfigNumberBaseBoxПользовательский элемент управления, который наследуется от ConfigNumberBaseBox: открытый частичный класс ConfigTemperBox: ConfigNumberBaseBoxЗапустите приложениеКогда я заканчиваю редактировать элемент управления ConfigTemperBox, вызывается ValidateTextBoxEntryValidateTextBoxEntry работает нормально, пока не встретит float.IsNaNпереполнение стекаРедактировать:
Debug.WriteLine () показывает, что код выполняется только один раз: без рекурсии.
Редактировать:
Это работает:
float fff = 0F;
int iii = fff.CompareTo(float.PositiveInfinity);
Это вылетает:
float fff = 0F;
int iii = fff.CompareTo(float.NaN);