Pull to refresh
164
-1
Тимур Гуев @tguev

Основатель BEEGEEK, автор курсов Поколение Python

Send message

Вы бы хотя бы условие задачи прочитали. Функция принимает целые числа в качестве аргументов, так что ваше решение в корне неверно.

Некоторые участники квеста пытались использовать эту схожесть))

Квест будет длиться ровно 1 неделю. Будут математические задачи тоже.

Спасибо за ваш вклад в IT онлайн образование. Вы большие молодцы!

Да в финальной версии будет using static, сейчас просто using.
Попробую ответить на Ваши вопросы:

1) У Stopwatch есть статическое свойство IsHighResolution — которое как раз определяет используется ли HPET;
2) Вики говорит, что следующие операционные системы поддерживают и используют HPET:
Windows Vista, Windows 2008, Windows 7, Windows 8
Mac OS X (версия для x86)
Linux версий 2.6 (драйвер rtc-cmos вместо rtc)
FreeBSD;
3) Если он будет настроен некорректно, я думаю, что он просто не будет использоваться, функция QueryPerformanceFrequency вернет false, ни один метод класса Stopwatch не имеет блоков try/catch;
4) Сложный вопрос. В общем все методы класса очень просты, поэтому замеры должны быть весьма точные;
5) На многопроцессорных системах HPET есть у каждого процессора и как я понял они не синхронизированны… Проблемы возникали на первых многоядерных процессорах, но сейчас производители исправили их. Кстати у класса Stopwatch есть на этот случай проверка в методе Stop, я писал о ней.

Вот нашел документацию от Intel по HPET: www.intel.com/content/www/us/en/software-developers/software-developers-hpet-spec-1-0a.html?wapkw=hpet
Да это реальный статический метод для конкатенации 2, 3 и 4 строк. Его можно вызвать на прямую, просто код станет менее читабельным, нежели используя оператор + который в него и разворачивается.
Да литералы конкатенируются на этапе компиляции, а не литералы используют StringBuilder.append.
На самом деле если конкатенация происходит не в цикле, то даже при 7-10 строк можно использовать String.Concat.
Его реализация, так же как и для 3 строк подсчитывает суммарную длинну строки и единожды выделяет для нее память.
Тот же StringBuilder внутри себя содержит массив char[] (точнее он является связным списком), так что наклодные расходы по памяти будут и там, но код теряет читабельност при этом.

Упс… дважды отправил
На самом деле если конкатенация происходит не в цикле, то даже при 7-10 строк можно использовать String.Concat.
Его реализация, так же как и для 3 строк подсчитывает суммарную длинну строки и единожды выделяет для нее память.
Тот же StringBuilder внутри себя содержит массив char[] (точнее он является связным списком), так что наклодные расходы по памяти будут и там, но код теряет читабельност при этом.
У Сергея Теплякова есть хороший пост на эту тему habrahabr.ru/post/148905/.
long i = long.MaxValue;
long i1 = i + 1; // i1 = long.MinValue

В данном коде происходит переполнение типа long, а поскольку нет соответствующих проверок на переполнение (checked), то вместо выброса исключения произойдет приведение к типу long. В результате переполнения переменная i1 будет содержать значение long.MinValue.

В случае если value = long.MinValue, -value = long.MaxValue + 1 = long.MinValue.

Это так же можно связать с тем, что для long.MinValue = -263 = 100000...000 противоположное число будет совпадать с самим числом, поскольку дополнительные коды совпадают:
100000...000

011111...111 инвертирование
000000...001 +1
__________
100000...000 дополнительный код для 100000...000
1. По поводу взятия модуля все просто: поскольку знак хранится в отдельной переменной то получить модуль ничего не стоит (необходимо только сравнение с нулем).

public static BigInteger Abs(BigInteger value)
{
if (!(value >= BigInteger.Zero))
return -value;
else
return value;
}

2. Метод ToString, который представляет число в десятичной системе счисления для вывода, должен обработать весь массив _bits длинна которого равна [log232X] = [32*log2X], где X — длинное число. Получается, метод ToString работает за логарифмическое время от длинны числа.

3. Умножение и деление (как я понял) выполняется обычным способом в столбик, который занимает O(n2) времени. Однако поскольку мы обрабатываем за раз целых 232 разрядов, получаем сложность перемножения/деления равную O(log2n). Хотя возможно используется алгоритм Карацубы.
Да действительно. Исправил.
Подправил, опечаточка с параметром метода IsPrime вышла.
Спасибо! Писать тоже было очень интересно :)
Действительно на сегодняшний день самый мощный метод работы с последовательностями — это преобразование бесконечных рядов, которые генерируют эти последовательности.
Действительно если ряд расходится это не значит, что он не имеет суммы.
Всем операциям которые мы проделывали над производящими функциями можно дать строгое истолкование как операциям над формальными рядами, а такие операции корректны даже если ряд расходится.
Но если мы говорим о просто степенных рядах, то конечно данная формула справедлива только для чисел меньших 1 по модулю.
object x = new string(new[] {'H', 'e', 'l', 'l', 'o'});
object y = new string(new[] {'H', 'e', 'l', 'l', 'o'});
bool res = x == y;

Интернирование работает только для строковых литералов. В данном же случае будут созданы два разных объекта, а поскольку тип времени компиляции — object, то сравниваться будут ссылки, которые не равны. Именно поэтому результат false.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity