Обновить
99
135.4
Даниил Тутубалин@DandyDan

Пользователь

Отправить сообщение

К Джон Неперу в гости приехал Генри Бриггс и сказал: "Теперь, когда вы опубликовали книгу про логарифмы, они кажутся настолько простыми и очевидными, что удивительно, как мы не додумались до этого раньше".

Мы нашли кандидата лучше.

Как понять, что комментарий написан нейронкой?

Если он начинается с «Вы правы…» — это нейронка, живой человек так никогда не скажет.

Как беспалевно проходить собеседования

Там ещё константу желательно вычесть, насколько я помню, но вообще да, хороший способ.

Потом битовыми сдвигами корни/степени считать.

Спасибо!

Нашёл эту книгу - "Занимательная алгебра" Я.И.Перельман, 1967 год. Глава "Седьмое математическое действие".

Действительно хорошо написано, и этот исторический анекдот про и "Странно, что никто не придумал это раньше" – хотел его тоже в статью добавить, но забыл )

В свою защиту скажу, что в описанном мною методе вообще не нужно запоминать никаких чисел.

Спасибо за наблюдение, поправил!

А кто-то возьмёт человека с такой строчкой в резюме?

В Таиланде свои сложности. Они не такие очевидные, как у нас, но риски всё равно присутствуют.

Неизвестные отцы

Если ранжировать языки по уровню страданий для разработчика

  1. Malbolge

  2. Rust

  3. Javascript

Запретить блоки { ... } без управляющей конструкции перед ними.

Befunge настолько лучше, чем JavaScript? Интересное заявление...

Пардон, писал сонным, опять перепутал Befunge и Malbolge.

Который показывает... что?

Который показывает, что как минимум 14 648 раз разработчики писали

cargo add help

вместо

cargo help add

А ведь можно не уворачиваться, просто возьмите нормальный пистолет.

Ахахаха.
Если ранжировать языки по уровню страданий для разработчика, то Rust будет где-то между JavaScript и Befunge.

Начну с простого примера в духе этой статьи: https://crates.io/crates/help
14 648 скачиваний.

Мы в студенчестве запускали Doom2 на i386 c 4Мб. Занимал 900Кб, влезал на дискетку.

print(2 << 63)
print(1 << 63)
print(maximum(2 << 63, 1 << 63))

Вариант только для целых чисел:

def my_max(a, b):
    x = a-b >> 1_000_000_000_000_000
    return a*(1+x) + b*(-x)

Не работает для чисел длиннее 113 террабайт, но если вам реально нужно работать с такими числами, стоит установить полноценный Python или дописать в формулу ещё несколько нулей.

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

max = a \cdot p + b \cdot (1-p)

где
p = 1, если a больше,
p=0, если b больше.


Казалось бы, остаётся просто проверить знаковый бит, но это Python, детка. Здесь встроенная длинная арифметика, поэтому до знакового бита не так просто добраться.

Можно было бы использовать метод bit_length()например так:

def is_negative(x):
   return -(x >> x.bit_length())

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

Пойдём другим путём.

Если посчитать модуль, то положительные числа (и ноль) не изменятся, а отрицательные поменяют знак. Проблема в том, что операция abs() тоже отсутствует в списке разрешённых. Значит, нужно возводить в квадрат.

Было б здорово, если бы была доступна операция возведения в степень. Тогда можно было найти знак так:

def get_sign(x):
    return x/((x**2)**.5)

Однако, во-первых, операции ** нет в списке разрешённых, во-вторых, не работает для нуля, а у нас даже нет рта, чтобы закричать условий, чтобы проверить граничные случаи.

Ничего не получается, пойдём другим путём.

Вместо вычитания разделим a/b. Само собой, может вызвать деление на ноль, но пока игнорируем. Если результат >1.0, значит a больше, если <1.0, значит b больше, если ==1.0, значит равны.

Если сконвертировать в int, то значения <1.0 превратятся в ноль. Нам бы здесь сишный !!, чтобы превратить любое ненулевое значение в единицу, но такого под рукой нет. not not - не битовая операция.

Решения нет, но я пока не сдаюсь ;)

А ризонинг как работает?

1
23 ...

Информация

В рейтинге
60-й
Зарегистрирован
Активность