none
вычисления типа math sin, round, random, floor RRS feed

  • Вопрос

  • Здравствуйте.
    Кто может пояснить как работают внутренние алгоритмы ОС?

    В частности вычисления типа math sin, round, random, floor?

    15 ноября 2020 г. 16:50

Ответы

  • Здравствуйте.
    Кто может пояснить как работают внутренние алгоритмы ОС?

    В частности вычисления типа math sin, round, random, floor?

    OS такими вещами типично не занимается, сегодня это просто команды процессора. Иногда одна, иногда несколько. Например sin() вычисляется одной командой процессора fsin. Компилятор просто вставляет нужные команды в код.

    В древние времена когда процессоры так не умели, вычисления даже простых операций вроде деления и умножения (даже целочисленного) требовали специальных подпрограмм. Обычно они находились библиотеке компилятора с конкретного языка и цеплялись к программе при сборке.

    Были так же особенности когда команды с плавающей запятой могли быть, а могли и не быть, в зависимости от конкретного железа. Например, сопроцессор x87 не был далеко не на каждом ПК. В этом случае при компиляции программы можно было выбрать режим когда команды сопроцессора интерпретировались специальным кодом в теле программы если сопроцессора не было. В некоторых других архитектурах, например DEC PDP-11, при попытке выполнить команду которую процессор не поддерживал возникало прерывание и команда могла эмулироваться как ОС, так и firmware компьютера.

    Ну а реализация этих подпрограмм может быть разная. Например синус можно вычислять разложением в ряд, по определенным формулам или по таблицам с интерполяцией. Будет разная скорость, погрешность и использование памяти. Детали для каждого случая несложно отыскать в интернете. Ну а простые операции вроде round вы и сами сможете реализовать используя набор 4 действия арифметики и преобразование в целое число или же деления с остатком.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 ноября 2020 г. 17:48
    Модератор

Все ответы

  • Здравствуйте.
    Кто может пояснить как работают внутренние алгоритмы ОС?

    В частности вычисления типа math sin, round, random, floor?

    OS такими вещами типично не занимается, сегодня это просто команды процессора. Иногда одна, иногда несколько. Например sin() вычисляется одной командой процессора fsin. Компилятор просто вставляет нужные команды в код.

    В древние времена когда процессоры так не умели, вычисления даже простых операций вроде деления и умножения (даже целочисленного) требовали специальных подпрограмм. Обычно они находились библиотеке компилятора с конкретного языка и цеплялись к программе при сборке.

    Были так же особенности когда команды с плавающей запятой могли быть, а могли и не быть, в зависимости от конкретного железа. Например, сопроцессор x87 не был далеко не на каждом ПК. В этом случае при компиляции программы можно было выбрать режим когда команды сопроцессора интерпретировались специальным кодом в теле программы если сопроцессора не было. В некоторых других архитектурах, например DEC PDP-11, при попытке выполнить команду которую процессор не поддерживал возникало прерывание и команда могла эмулироваться как ОС, так и firmware компьютера.

    Ну а реализация этих подпрограмм может быть разная. Например синус можно вычислять разложением в ряд, по определенным формулам или по таблицам с интерполяцией. Будет разная скорость, погрешность и использование памяти. Детали для каждого случая несложно отыскать в интернете. Ну а простые операции вроде round вы и сами сможете реализовать используя набор 4 действия арифметики и преобразование в целое число или же деления с остатком.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 ноября 2020 г. 17:48
    Модератор
  • спасибо, очень вам благодарен

    сейчас в сети появились исходники  windows2000 , поэтому я и хотел понять как все происходит. И если по математическим функциям еще есть ответы даже в wiki, то по вычислению random ничего не понятно. 

    15 ноября 2020 г. 18:11
  • спасибо, очень вам благодарен

    сейчас в сети появились исходники  windows2000 , поэтому я и хотел понять как все происходит. И если по математическим функциям еще есть ответы даже в wiki, то по вычислению random ничего не понятно. 

    Тут все куда проще чем например синус - библиотека для различных языков или даже конкретная программа реализует эту функцию, типично используя линейный конгруэнтный метод генерации псевдослучайных чисел (ПСЧ):

    Xn+1 = (a * Xn + c) mod m

    где a, c, m - константы, Xn предыдущее (псевдо)случайное число, Xn+1 - следующее число. Начинается все это с какого то числа, обычно с 0. И да, все это есть даже в wiki и описано в литературе. 

    ОС к этому прямого отношения не имеет.

    Есть так же ПСЧ генераторы криптографического качества, за них в Windows отвечают конкретные криптопровайдеры, а не сама ОС.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 ноября 2020 г. 19:19
    Модератор
  • хорошо

    если я открываю любое окно в Windows, то его местоположение на экране определяется случайным образом, при этом происходит вычисление случайной координаты Х и случайной координаты Y. Как?

    15 ноября 2020 г. 19:24
  • хорошо

    если я открываю любое окно в Windows, то его местоположение на экране определяется случайным образом, при этом происходит вычисление случайной координаты Х и случайной координаты Y. Как?

    Не знаю как, какая собственно разница?

    Но сразу скажу что положение окон вовсе не случайно. Это очевидно если открыть например 10-20 окон одного приложения в скрипте. Видно что окна размещаются смещением на какое то фиксированное число пикселей вниз и вправо по сравнению с предыдущим окном. Запустите скрипт и посмотрите сами:

    for %s in (1, 2, 3, 4, 5, 6, 7, 8, 9) do start cmd

    Даже если оно и было бы случайно, то код размещения окон просто вызывал бы функцию rand() два раза и все дела.

    Но, разумеется, это было бы крайне неудобно для пользователей когда окна появляются непредсказуемо где. В любом случае это уже не вопрос реализации, а вопрос дизайна. 



    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 ноября 2020 г. 19:51
    Модератор