2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 NaN == NaN - непонятно
Сообщение24.09.2010, 21:42 


20/09/10
55
Привет всем :)

Возник интерес написания алгоритма по получению результата деления элементов двух двумерных массивов одинаковой длины.

$R_i_j/P_i_j==R_i_h/R_j_h$

Массивы могут содержать нулевые значения и может возникать следующая ситуация как NaN==NaN

Нужно ли в таком условие определять результат как true?

Что вы думаете?

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение24.09.2010, 21:44 
Заслуженный участник


04/05/09
4587
Любое сравнение с NaN даёт false.
(NaN == NaN) == false
(NaN != NaN) == false
На этом основан простой тест, является ли число NaN:
Код:
bool isnan(double x)
{
    return !(x == x);
}

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение24.09.2010, 22:04 


20/09/10
55
То есть при таком условии блок не будет выполняться

Цитата:
if(NaN==NaN){block}


Если вроде NaN/NaN дает 1? Тогда почему нельзя возвращать true?

Если рассмотреть конкретный случай с этими массивами, то там случается деление на 0, что приводит к NaN значение как "бесконечность" .

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение24.09.2010, 22:18 
Заслуженный участник


04/05/09
4587
guest001 в сообщении #355921 писал(а):
То есть при таком условии блок не будет выполняться

Цитата:
if(NaN==NaN){block}


Если вроде NaN/NaN дает 1? Тогда почему нельзя возвращать true?

Любые арифметические операции, как и любые математические функции, кроме некоторых специальных типа isnan(), дают NaN, если среди аргументов есть NaN.
Т.е. результат деления NaN/NaN тоже NaN.

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение24.09.2010, 22:33 


20/09/10
55
Тут получается isnan и isInfinite вернет true :-) В этом варианте

if(isnan(NaN)==isnan(NaN)) вернет true получается?

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение24.09.2010, 22:56 
Заслуженный участник


04/05/09
4587
guest001 в сообщении #355927 писал(а):
Тут получается isnan и isInfinite вернет true :-) В этом варианте

if(isnan(NaN)==isnan(NaN)) вернет true получается?

isInfinite(NaN) вернёт false, а в остальном верно.

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение25.09.2010, 04:36 


20/09/10
55
venco в сообщении #355932 писал(а):
guest001 в сообщении #355927 писал(а):
Тут получается isnan и isInfinite вернет true :-) В этом варианте

if(isnan(NaN)==isnan(NaN)) вернет true получается?

isInfinite(NaN) вернёт false, а в остальном верно.


Это все понятно, но у меня почему-то
Цитата:
NaN == NaN


возвращает как если бы true, а точнее false, но блок все равно выполняется :shock:

Как я уже говорил, под NaN==NaN я имею ввиду два результата деления А==В
В одном из А или В или в двух одновременно случается NaN, но блок все равно выполняется

Код:
if(A==B){С[j]=1;}


То есть в результате я имею массив С заполненный только одними единицами, хотя вроде как не должен из-за false :x

Как это исправить - не пойму...

Хелп!

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение25.09.2010, 05:58 
Заслуженный участник


04/05/09
4587
Значит там у Вас не NaN.
Приведите всю программу, или хотя бы существенную часть.

 Профиль  
                  
 
 Re: NaN == NaN - непонятно
Сообщение25.09.2010, 06:09 


20/09/10
55
venco в сообщении #355968 писал(а):
Значит там у Вас не NaN.
Приведите всю программу, или хотя бы существенную часть.


Вроде бы работает. Я поменял индекс h с 0 на 1 - ну чтобы само на себя не делить на первой итерации - вроде теперь нормально :?
Но честно говоря, не понял почему не получается при h=0?
Если h=0, то блок по-любому выполняется даже с NaN :shock:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group