Поскольку FALSE возвращается для «no more data» или «error», цикл while
будет выполняться только до тех пор, пока он не остановится.
Более понятный способ записи:
$buffer = fgets($handle, 4096);
while( $buffer !== false )
{
echo $buffer;
$buffer = fgets($handle, 4096);
}
Но это не так чисто.
double i = Double.NaN;
API для [1 123] Double.equals () обстоятельно объясняет ответ: "Дважды. NaN == Дважды. NaN имеет ложь значения". Это разрабатывается в Спецификации языка Java под" Типы С плавающей точкой, Форматы и Значения ":
NaN
не заказан, таким образом, числовые операторы сравнения<
,<=
,>
, и>=
возвратfalse
, если или или оба операндаNaN
. Оператор равенства==
возвратыfalse
, если любой операндNaN
, и оператор неравенства!=
возвратыtrue
, если любой операндNaN
. , В частности,x!=x
true
, если и только еслиx
NaN
, и(x<y) == !(x>=y)
будетfalse
, еслиx
илиy
будетNaN
.
Значение i
тогда Недопустимо. "Не Число".
После некоторого гугления, я узнал, что у Вас CAN есть NaN (Не Число) в Java! Так, Плавающим числом Указания является Тип данных, и Значением является NaN. См. здесь
Я не уверен, но я верю (я == i), не атомарная операция в многопоточном процессе, поэтому если я оценю, то будет изменен другим потоком между нажатиями, он - значение для укладки на потоке, выполняющем цикл, тогда то условие может быть ложью.
float i = Float.NaN;
while(i == i) ;
System.out.println("Not infinite!");
double i = Double.NaN;
NaN ничему не равен, включая себя.
Думайте о Nan как об эквиваленте исключения, но использует волшебное значение в рамках вычисления. Поскольку неудавшееся вычисление - например, квадратный корень отрицания, разделитесь на нуль и т.д. - это не имеет никакого смысла в сравнении их против ничего больше. В конце концов, если делятся на нуль, nan, это эквивалентно квадратному корню-2 или квадратному корню-3?
Nan позволяет вычисление, которое включает шаг, который дает недопустимый ответ для завершения, не представляя дополнительные исключения. Проверить ответ - значение, просто тестируют на не nandness (это - слово, если не я складываю его в мешок) через Float.isNan () o эквивалентный.
Я добавил бы
float i = Float.NaN;
, а также
double i = Double.NaN;
<час> А общий прием в подобных вопросах это в предположении, Вы делаете это, я - интервал. Другие общие предположения могли бы быть s, Строка, x, y являются двойным, ch является символом, b является байтом и т.д., Если Вы видите вопрос как это, можно держать пари, что 'я' не ожидать тип.
А подобный вопрос; Это никогда не циклично выполняется, что является 'x'
while(x == x && x != x + 0) { }
Другой вопрос, который я вполне люблю; Этот цикл является бесконечным циклом, что является возможными значениями x. (: Я считаю двенадцать из них:)
while(x != 0 && x == -x) { }
Я знаю, что это - вопрос о Java, но рассмотрение вопроса для других языков интригует.
В C, простой тип, такой как 'интервал' мог показать 'оконечный, прежде чем вселенная вырастит холодное' поведение, если бы 'я' был объявлен как энергозависимое (таким образом, компилятор был бы вынужден сделать два чтения 'меня' для каждого повторения), и если 'я' был на самом деле в памяти, где что-то еще могло влиять на него. Тогда цикл завершился бы, когда 'я' изменился между двумя чтениями единственного повторения. ( Добавленный : возможное место - в микрокомпьютере, где 'я' на самом деле расположен в адресе порта I/O, возможно, соединилось с позиционным датчиком. Было бы более вероятно, если бы 'я' был переменной указателя (указатель на энергозависимую память), и оператор был' while (*i == *i);
'.)
, Как свидетельствуется другими ответами, в C++, '==' оператор может быть предоставлен пользователем, если я имею пользовательский класс, таким образом, что-либо могло бы быть возможным.
Скорее как NaN, на основанном на SQL языке, цикл не был бы бесконечен, если бы значение я был ПУСТЫМ; однако, любое ненулевое значение сделало бы цикл бесконечным. Это скорее похоже на Java, где любое число (в противоположность NaN) делает цикл бесконечным.
я не вижу, что конструкция имеет любое практическое применение, но это - интересный вопрос о мелочах.
Я был удивлен, не увидев этого решения:
while (sin(x) == sin(x)) //probably won't eval to true
В ответ на комментарий попробуйте выполнить следующее:
double x = 10.5f;
assert (x == asin(sin(x)));
x всегда должен равняться арксинусу (sin (x)) в теории, но на практике это не так.