-
NaNとは何ですか?
NaN (英語の Not-a-Number) は、浮動小数点数の特殊な状態の 1 つです。多くの数学ライブラリおよび数学コプロセッサで使用されます。この状態は、前の数学演算が未定義の結果で完了した場合や、条件を満たさない数値がメモリ セルに入力された場合など、さまざまな場合に発生する可能性があります。
IEEE 754 に従って、この状態は、指数を予約値 11...11 に設定し、仮数を 0 (マシン無限大の予約値) 以外に設定することによって指定されます。符号と仮数には追加情報が含まれる場合があります。多くのライブラリは「負の」NaN を -NaN として出力します。
応答として NaN が返される操作には次のものがあります。
- オペランドの 1 つとして NaN を含むすべての数学演算。
- ゼロをゼロで除算する。
- 無限を無限で割る。
- ゼロを無限に乗算します。
- 無限大と反対の符号の無限大の加算。
- 負の数の平方根を計算します[1]。
- 負の数の対数をとります。
一部のプログラミング言語には「サイレント」NaN と「シグナル」NaN があります。最初のものは、何らかの操作に関与すると NaN を返し、2 つ目は緊急事態を引き起こします。通常、「静か」または「信号」は仮数の最上位ビットによって決まります。
NaN は他の値と等しくありません (それ自身[2] でさえも)。したがって、NaN の結果をチェックする最も簡単な方法は、結果の値をそれ自体と比較することです。
他の比較演算子の動作は言語によって異なります。一部の言語は false[3] (a < b と b > a が NaN に対して異なる動作をするように) を生成しますが、他の言語は「静かな」 NaN であってもクラッシュをスローします。
サイレント NaN を引数として受け取る重要な演算は、他の引数の値に関係なく、常に NaN を返します。この規則の唯一の例外は、「2 番目」の引数 (NaN を除く) の値を返す max 関数と min 関数です。アイデンティティである単純な演算は特別に扱われます。たとえば、1NaN は 1 に等しいです。
-
Javaで無限を取得するにはどうすればよいですか?
Java では、型は
double
プラスの無限大とマイナスの無限大に対して特別な意味を持ちます。正の数を 0.0 で割ると「プラスの無限大」、負の数 - 「マイナスの無限大」になります。これらの概念は、次の型の特別な定数に対応しますDouble
。コード 説明 public static final double POSITIVE_INFINITY = 1.0 / 0.0;
プラス無限大 public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
マイナス無限大 - 文字列を数値に変換すると、文字が含まれます。答えはNaNです
- 無限大マイナス無限大。答えはNaNです
- 答えに数字が含まれることを期待しているものの、結果が不明である状況は他にもたくさんあります。
NaN を含む演算はすべて NaN になります。
無限大のアクション: 表現 結果 n ÷ ±無限大 0 ±無限大 × ±無限大 ±無限大 ±(ゼロではない) ÷ ±無限大 無限+無限 無限大 ±0 ÷ ±0 NaN 無限 - 無限 NaN ±Infinity ÷ ±Infinity NaN ±Infinity × 0 NaN -
Как проверить, что в результате вычисления получилась бесконечность?
Есть ответ на StackOverFlow.
Все сводится к выводу
System.out.println()
-
What такое битовая маска?
Битовая маска — это когда хранится много различных логических значений (true/false) в виде одного целого числа. При этом каждому boolean-значению соответствует определенный бит.
-
Где применяют битовые маски?
В основном там, где надо компактно хранить много информации об an objectх. Когда хранишь много информации об an objectе, всегда наберется пара десятков логических переменных. Вот их всех удобно хранить в одном числе. Именно хранить. Т.к. пользоваться им в работе не так уж удобно.
-
Как установить бит в единицу в битовой маске?
Опираясь на лекции можно ответить таким codeом:
Здесь использовал метод
Integer.toBinaryString()
, дабы проверить себя, а вдруг)public class BitMask { public static void main(String[] args) { int a = 9; a |= (1<<2); // установить в 1 бит 2 System.out.println(Integer.toBinaryString(a) + " "+ a); } }
Вывод такой:
1101 13
-
Как установить бит в ноль в битовой маске?
public class BitMask { public static void main(String[] args) { int a = 15; a &= ~(1<<2); // установить в 0 бит 2 System.out.println(Integer.toBinaryString(a) + " "+ a); } }
Вывод:
1011 11
Я взял число 15, так How на нем более наглядно видно, куда устанавливается 0.
-
Как получить meaning определенного бита в битовой маске?
public class BitMask { public static void main(String[] args) { int a = 15; a &= ~(1<<2); // установить в 0 бит 2 int c = a & (1<<2); // узнаем про 2 бит int d = a & (1<<3); // узнаем про 3 бит System.out.println(Integer.toBinaryString(a) + " "+ a + " " + c +" "+ d); } }
Вывод:
1011 11 0 8
C 0 все понятно, на том месте и вправду 0. А переменная d возвращает meaning запрашиваемого бита (в 10-ой системе).
-
What такое ленивое вычисление выражения?
Статья: Ленивое программирование и ленивые вычисления
Это ленивые вычисления (lazy evaluation). В ленивых вычислениях ни один параметр не вычисляется, пока в нем нет необходимости. Программы фактически начинаются с конца и работают от конца к началу. Программа вычисляет, что должно быть возвращено, и продолжает движение назад, чтобы определить, Howое meaning для этого требуется. В сущности каждая функция вызывается с promise'ами для каждого параметра. Когда для вычисления необходимо meaning, тогда выполняется promise. Поскольку code выполняется только тогда, когда необходимо meaning, это называется вызов по необходимости (call-by-need). В традиционных языках программирования instead of promise'ов передаются значения, это называется вызов по значению(call-by-value).
Технология программирования "вызов по необходимости" имеет ряд преимуществ. Потоки имплементируются автоматически. Ненужные значения никогда не вычисляются. Однако, поведение ленивых программ часто трудно предсказать. В программах типа "вызов по значению" порядок вычисления довольно предсказуем, поэтому любые time- or sequence-based вычисления относительно легко имплемнтировать. В ленивых языках, где специальные конструкции, например, monads, необходимы для описания явно упорядоченных событий, это намного труднее. Все это также делает связь с другими языками более трудной.
Существуют языки программирования, например, Haskell и Clean, использующие ленивое программирование по умолчанию. Кроме того, для некоторых языков, таких How Scheme, ML и другие, существуют ленивые версии.
Иногда, откладывая вычисления до тех пор, пока не понадобится их meaning, вы можете оптимизировать speed выполнения программы or реструктурировать программу в более понятную форму. Несмотря на свою ценность, методы ленивого программирования не слишком широко используются or даже не очень известны. Подумайте о том, чтобы добавить их в ваш арсенал.
-
Чем отличается использование
&&
и&
для типаboolean
?&&
— это логическое «и». (В этом случае имеют место ленивые вычисления: некоторые вычисления опускаются, когда результат и так ясен)&
— это побитовое «и» (Если применить этот оператор к переменным типа Boolean, то ленивых вычислений происходить не будет)
DefNeo
レベル 36
GO TO FULL VERSION