JavaRush /Java Blog /Random-TK /30-njy dereje. Dereje derejesindäki söhbetdeşlik soraglar...
DefNeo
Dereje

30-njy dereje. Dereje derejesindäki söhbetdeşlik soraglaryna jogaplar

Toparda çap edildi
30-njy dereje. 1-nji dereje temasyndaky söhbetdeşlik soraglaryna jogaplar
  1. NaN näme?

    NaN (Iňlis däl-a-Number) ýüzýän nokat belgisiniň aýratyn ýagdaýlaryndan biridir. Köp matematiki kitaphanalarda we matematiki prosessorlarda ulanylýar. Bu ýagdaý dürli ýagdaýlarda ýüze çykyp biler, mysal üçin, öňki matematiki amal näbelli netije bilen gutaranda ýa-da şertleri kanagatlandyrmaýan bir san ýat öýjügine girizilen ýagdaýynda bolup biler.

    IEEE 754-e laýyklykda, bu ýagdaý eksponenti 11 ... 11 ätiýaçlyk bahasyna, mantisany bolsa 0-dan başga zat (maşyn çäksizligi üçin ätiýaçlyk bahasy) bilen kesgitlenýär. Belgi we mantissa käbir goşmaça maglumatlary alyp biler: köp kitaphanada “negatiw” NaN -NaN çykýar.

    Jogap hökmünde NaN-e sebäp bolan amallar şulary öz içine alýar:

    • operandlaryň biri hökmünde NaN-i öz içine alýan ähli matematiki amallar;
    • noly nola bölmek;
    • çäksizligi çäksizlige bölmek;
    • noly çäksiz köpeltmek;
    • ters alamatyň çäksizligi bilen çäksizligi goşmak;
    • otrisatel sanyň kwadrat köküni hasaplamak [1];
    • otrisatel sanyň logarifmini almak.

    Käbir programmirleme dillerinde “sessiz” we “signal” NaN bar: birinjisi, haýsydyr bir operasiýa gatnaşanda NaN-i yzyna gaýtaryp berýär, ikinjisi adatdan daşary ýagdaý döredýär. Adatça, "ümsüm" ýa-da "signal" mantisanyň iň möhüm bölegi bilen kesgitlenýär.

    NaN başga bir gymmata deň däl (hatda özi-de däl [2]); Şoňa görä, NaN üçin netijäni barlamagyň iň ýönekeý usuly, alnan bahany özi bilen deňeşdirmekdir.

    Beýleki deňeşdirme operatorlarynyň özüni alyp barşy dil boýunça üýtgeýär. Käbir diller ýalan [3] öndürýär (şonuň üçin <b we b> NaN bilen başgaça hereket etmek üçin), käbirleri hatda “asuda” NaN üçinem heläkçilik döredýärler.

    Arkaýyn NaN-ni argument hökmünde kabul edýän islendik ähmiýetsiz amal, beýleki argumentleriň bahasyna garamazdan hemişe NaN-ni yzyna getirer. Bu düzgüniň ýeke-täk kadadan çykmalary "ikinji" argumentiň (NaN-den başga) bahasyny yzyna gaýtaryp berýän iň ýokary we min funksiýalardyr. Şahsyýeti bolan ownuk amallara aýratyn seredilýär: mysal üçin 1NaN 1-e deňdir.

  2. Java-da çäksizligi nädip almaly?

    Java-da görnüşiň doublegoşmaça çäksizlik we minus çäksizligi üçin aýratyn manylary bar. 0.0 bilen bölünen polo positiveitel san "goşmaça çäksizligi", negatiw san bolsa "minus çäksizligi" berýär. Bu düşünjeler aýratyn görnüşdäki yzygiderlilige gabat gelýär Double:

    Kod Düşündiriş
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; goşmaça çäksizlik
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; minus çäksizligi
    1. Setiri sana öwürýäris we ol harplary öz içine alýar. Jogap NaN
    2. Çekimsizlik minus çäksizlik. Jogap NaN
    3. Jogapda san garaşýan başga-da köp ýagdaý bar, ýöne netijesi belli däl.

    NaN-i öz içine alýan islendik amal NaN-de bolýar.

    Çäksiz hereketler:
    Düşündiriş Netije
    n ÷ inity Çäksizlik 0
    ± Çäksizlik × ± Çäksizlik ± Çäksizlik
    ± (nol däl) ÷ ± Çäksizlik
    Infinity + Infinity Çäksizlik
    ± 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, то ленивых вычислений происходить не будет)

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION