-
NaN nədir?
NaN (İngiliscə Not-a-Number) üzən nöqtəli ədədin xüsusi vəziyyətlərindən biridir. Bir çox riyazi kitabxanalarda və riyazi soprosessorlarda istifadə olunur. Bu vəziyyət müxtəlif hallarda, məsələn, əvvəlki riyazi əməliyyat qeyri-müəyyən nəticə ilə tamamlandıqda və ya şərtləri təmin etməyən nömrə yaddaş xanasına daxil edildikdə baş verə bilər.
IEEE 754-ə uyğun olaraq, bu vəziyyət eksponenti 11...11 qorunan dəyərə, mantisanı isə 0-dan başqa hər hansı bir yerə təyin etməklə müəyyən edilir (maşın sonsuzluğu üçün qorunan dəyər). İşarə və mantisada bəzi əlavə məlumatlar ola bilər: bir çox kitabxanalar “mənfi” NaN-ni -NaN kimi çıxarır.
Cavab olaraq NaN ilə nəticələnən əməliyyatlara aşağıdakılar daxildir:
- operandlardan biri kimi NaN ehtiva edən bütün riyazi əməliyyatlar;
- sıfırı sıfıra bölmək;
- sonsuzluğu sonsuzluğa bölmək;
- sıfırın sonsuzluğa vurulması;
- əks işarənin sonsuzluğu ilə sonsuzluğun əlavə edilməsi;
- mənfi ədədin kvadrat kökünün hesablanması[1];
- mənfi ədədin loqarifmini götürmək.
Bəzi proqramlaşdırma dillərində "səssiz" və "siqnal" NaN var: birincisi, hər hansı bir əməliyyatda iştirak edərkən NaN-ni qaytarır, ikincisi fövqəladə vəziyyətə səbəb olur. Tipik olaraq, "sakit" və ya "siqnal" mantisanın ən əhəmiyyətli biti ilə müəyyən edilir.
NaN heç bir başqa qiymətə bərabər deyil (hətta özü də deyil[2]); Müvafiq olaraq, NaN üçün nəticənin yoxlanılmasının ən sadə üsulu nəticədə alınan dəyəri özü ilə müqayisə etməkdir.
Digər müqayisə operatorlarının davranışı dilə görə dəyişir. Bəzi dillər false[3] verir (a < b və b > a NaN ilə fərqli davranması üçün), digərləri hətta “sakit” NaN üçün də qəzaya uğradır.
Arqument kimi səssiz NaN götürən hər hansı qeyri-trivial əməliyyat digər arqumentlərin dəyərindən asılı olmayaraq həmişə NaN qaytaracaq. Bu qayda üçün yeganə istisnalar "ikinci" arqumentin (NaN-dən başqa) dəyərini qaytaran max və min funksiyalarıdır. Şəxsiyyətlər olan əhəmiyyətsiz əməliyyatlar xüsusi olaraq nəzərdən keçirilir: məsələn, 1NaN 1-ə bərabərdir.
-
Java-da sonsuzluğu necə əldə etmək olar?
Java-da tip
double
əlavə sonsuzluq və mənfi sonsuzluq üçün xüsusi mənalara malikdir. 0.0-a bölünən müsbət ədəd "plus sonsuzluq", mənfi ədəd isə "minus sonsuzluq" verir. Bu anlayışlar tipli xüsusi sabitlərə uyğundurDouble
:Kod Təsvir public static final double POSITIVE_INFINITY = 1.0 / 0.0;
üstəgəl sonsuzluq public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
mənfi sonsuzluq - Biz sətri rəqəmə çeviririk və o, hərfləri ehtiva edir. Cavab NaN-dir
- Sonsuzluq minus sonsuzluq. Cavab NaN-dir
- Cavabda bir nömrə gözlədikləri bir çox başqa vəziyyətlər var, lakin nəticə məlum deyil.
NaN ehtiva edən istənilən əməliyyat NaN ilə nəticələnir.
Sonsuzluqla hərəkətlər: İfadə Nəticə n ÷ ±Sonsuzluq 0 ±Sonsuzluq × ±Sonsuzluq ±Sonsuzluq ±(sıfır deyil) ÷ ±Sonsuzluq Sonsuzluq + Sonsuzluq Sonsuzluq ±0 ÷ ±0 NaN Sonsuzluq - Sonsuzluq 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
Səviyyə
GO TO FULL VERSION