JavaRush /Блоги Java /Random-TG /Сатҳи 30. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ
DefNeo
Сатҳи

Сатҳи 30. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ

Дар гурӯҳ нашр шудааст
Сатҳи 30. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ - 1
  1. NaN чист?

    NaN (англисӣ No-a-Number) яке аз ҳолатҳои махсуси рақами нуқтаи шинокунанда мебошад. Дар бисёре аз китобхонаҳои математикӣ ва сопроцессорҳои математикӣ истифода мешавад. Ин ҳолат метавонад дар ҳолатҳои гуногун рух диҳад, масалан, вақте ки амалиёти математикии қаблӣ бо натиҷаи номуайян анҷом дода шудааст ё агар рақаме, ки ба шартҳоро қонеъ намекунад, ба ячейкаи хотира ворид карда шуда бошад.

    Мутобиқи IEEE 754, ин ҳолат бо роҳи муқаррар кардани нишондиҳанда ба қимати ҳифзшуда 11...11 ва мантисса ба ҳама чизи ғайр аз 0 (қимати ҳифзшуда барои беохирии мошин) муайян карда мешавад. Аломат ва мантисса метавонад баъзе маълумоти иловагӣ дошта бошад: бисёр китобхонаҳо NaN-ро ҳамчун -NaN "манфӣ" мебароранд.

    Амалиёте, ки ба NaN ҳамчун ҷавоб оварда мерасонад, иборат аст аз:

    • ҳама амалҳои математикие, ки NaN ҳамчун яке аз операндҳо доранд;
    • тақсими сифр ба сифр;
    • тақсими беохир ба беохир;
    • зарб кардани сифр ба беохир;
    • изофаи беохир бо беохирии аломати муқобил;
    • ҳисоб кардани решаи квадратии адади манфӣ[1];
    • гирифтани логарифми адади манфӣ.

    Баъзе забонҳои барномасозӣ NaN-и "хомуш" ва "сигнал" доранд: якум, вақте ки дар ҳама гуна амалиёт иштирок мекунад, NaN-ро бармегардонад, дуюмаш ҳолати фавқулоддаро ба вуҷуд меорад. Одатан, "ором" ё "сигнал" аз ҷониби каме муҳимтарини мантисса муайян карда мешавад.

    NaN ба ягон арзиши дигар баробар нест (ҳатто худи [2]); Мувофиқи он, соддатарин усули санҷиши натиҷа барои NaN муқоиса кардани арзиши натиҷавӣ бо худ мебошад.

    Рафтори дигар операторҳои муқоисавӣ вобаста ба забон фарқ мекунад. Баъзе забонҳо бардурӯғ [3] тавлид мекунанд (то ки a < b ва b > бо NaN гуногун рафтор кунанд), дигарон ҳатто барои "ором" NaN хато мекунанд.

    Ҳар як амалиёти ночиз, ки NaN-и хомӯшро ҳамчун далел мегирад, новобаста аз арзиши далелҳои дигар, ҳамеша NaN-ро бармегардонад. Ягона истисноҳои ин қоида функсияҳои макс ва min мебошанд, ки арзиши далели "дуюм" -ро бармегардонанд (ба ғайр аз NaN). Амалиётҳои ночиз, ки шахсият мебошанд, махсусан баррасӣ карда мешаванд: масалан, 1NaN ба 1 баробар аст.

  2. Чӣ тавр беохириро дар 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; минус бесконечность
    1. Строку конвертируем в число, а в ней есть буквы. Ответ — NaN
    2. Бесконечность минус бесконечность. Ответ — NaN
    3. Многие другие ситуации, где в ответе ждут число, а получается неизвестно что.

    Любая операция, где есть NaN, дает в результате NaN.

    Действия с бесконечностью:
    Выражение Результат
    n ÷ ±Infinity 0
    ±Infinity × ±Infinity ±Infinity
    ±(не ноль) ÷ ±Infinity
    Infinity + Infinity Infinity
    ±0 ÷ ±0 NaN
    Infinity - Infinity NaN
    ±Infinity ÷ ±Infinity NaN
    ±Infinity × 0 NaN
  3. Как проверить, что в результате вычисления получилась бесконечность?

    Есть ответ на StackOverFlow.

    Все сводится к выводу System.out.println()

  4. What такое битовая маска?

    Битовая маска — это когда хранится много различных логических значений (true/false) в виде одного целого числа. При этом каждому boolean-значению соответствует определенный бит.

  5. Где применяют битовые маски?

    В основном там, где надо компактно хранить много информации об an objectх. Когда хранишь много информации об an objectе, всегда наберется пара десятков логических переменных. Вот их всех удобно хранить в одном числе. Именно хранить. Т.к. пользоваться им в работе не так уж удобно.

  6. Как установить бит в единицу в битовой маске?

    Опираясь на лекции можно ответить таким 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

  7. Как установить бит в ноль в битовой маске?

    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.

  8. Как получить 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-ой системе).

  9. 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 даже не очень известны. Подумайте о том, чтобы добавить их в ваш арсенал.

  10. Чем отличается использование && и & для типа boolean?

    && — это логическое «и». (В этом случае имеют место ленивые вычисления: некоторые вычисления опускаются, когда результат и так ясен)

    & — это побитовое «и» (Если применить этот оператор к переменным типа Boolean, то ленивых вычислений происходить не будет)

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION