Программирование, Путешествия, Покер

Последний пост:1 апреля
810
Статистика
Всего постов
3225
843,585 просмотров
Новых постов
+0
1 в день
Лучшие посты автора
27.09.2022 +233
21.12.2019 +196
22.02.2023 +169
04.01.2023 +166
13.07.2019 +154
Лучшие посты читателей
inpace +111
justpus7 +98
vsobakekot +88
Gtrdy +85
s4ekotilla +78
Самые активные читатели
1 88 108 109 110 111 130 162
  • Цитата (valeg @ 16.07.21)  

    В целом типе не представишь

    Тип тут не причем, замени целый тип на любой другой. Целый взят для примера.

    Цитата (valeg @ 16.07.21)  

    Это когда изначально проектируется система как надо

    Системы бывают разные, цели разные и типы используются тоже разные.

    Цитата (valeg @ 16.07.21)  

    В биткоине вроде тоже в сатоши все летает, но это не точно

    Да обычно используется long 64-битный.

    7/15
    Ответить Цитировать
    0
  • Цитата (valeg @ 16.07.21)  

    это если торговый симулятор написан через жопу, и их начинал писать индус из собеса автора, все грамотные симуляторы для работы с деньгами используют fixed point

    Напиши пожалуйста пример грамотного подхода. Допустим, приходят данные по стакану в текстовом виде. Точность 6 знаков после запятой. Нам надо поставить ордер на покупку на 0.5% ниже какой-то средней цены. Сам принцип интересует.

    10/12
    Ответить Цитировать
    0
  • ну конкретно тут можно в double переложить и умножить на .95 и поставить ордер, у тебя уже биржа посчитает остаток правильный, а там под капотом fixed point

    11/12
    Ответить Цитировать
    0
  • Цитата (flek @ 16.07.21)  

    Интересная статья на хабре про собеседования – https://habr.com/ru/post/534902/


    Больше всего меня удивил момент, где они дают программисту на тестовом периоде делать задания, которые уже сделаны :thinking:

     

    Избыточные задания

    Хоть период и тестовый, но сразу никто кандидата на реальный проект не бросает - а делаем мы вот что. У нас есть пара реальных и уже решённых задач (то есть с точки зрения реальной работы в них нет смысла) - но всё равно даём их кандидату. Эти задачи

    1) опять же выявляют способности кандидата в некоторых специфических областях;

    2) позволяют сравнить кандидата; так как все в компании прошли через эти задачи, можно считать эти задачи эталонными и использовать для сравнения членов команды: кто быстрее, у кого лучше скиллы и так далее (это кстати популярная тема - дать одно задание разным разрабам и смотреть как каждый будет решать его)

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

    Он описывает стандартный процесс тестирования на многих удалённых галерах. 

    "Избыточные задания" - это тоже стандартная практика компаний где есть буткемпы. Гугл тоже такое пробовал. 

     

    А вот умалчивает он (или ещё не понял), что такой хайринг полное говно. Такие задания хакаются как орешки. Индусы даже пилят сайты на которых предлагают за вас пройти, решения и т.п. Текучка у таких компаний дикая. Буткемп он описывает как манну небесную для кандидатов, на деле же половина сами уходят в его процессе.

    50/111
    Ответить Цитировать
    0
  • Пишу сейчас бота на Бинанс. У вот нужно мне определить, когда позиция изменится (откроется какой-то ордер). Есть проверка типа

    if OldPosition = NewPosition then // делаем что-то

    Тип real и предварительно размер лота округляется до нужной точности.

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

    0.001 =  0.001 не всегда true (хотя в логах я вижу одинаковые значения, но они для компа не равные).

    Пришлось для всех вещественных типов вместо проверки на равенство менять на IsZero(OldPos - NewPos).

    27/32
    Ответить Цитировать
    0
  • Ну да, по идее сравнения даблов друг с другом надо делать через сравнение их разности с каким-то порогом, типа мы считаем что А и B равны только если А - B < 0.0001 (ну или другой предел, важно что не сравнение с 0)

    784/1049
    Ответить Цитировать
    2
  • Galax, дожили, что не можете сидеть на Жапе ровно.____ strkk, Если (Модуль(A-B)) < Delta, то ...
    16/20
    Ответить Цитировать
    0
  • Galax, дожили, что не можете сидеть на Жапе ровно.

    Я не понимаю - это какой-то программистский жаргон?

    Мой посыл был в том, что я раньше не сталкивался с подобной проблемой и я не мог даже предположить, что проблема может быть в такой безобидной строчке кода. Проблема усугублялась тем, что в программе делалось множество асинхронных REST-запросов на биржу, и логика программы происходила в цикле таймера, и поэтому стандартными способами оттрассировать код не получалось (тем более ошибка возникала довольно редко).

    Я когда пытался разобраться, то машинально пропускал эту строчку кода, так как был уверен, что там одинаковые вещественные числа.

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

    28/32
    Ответить Цитировать
    2
  • Используй логи, выводи print проблемных мест а потом долго в них смотри) все легче, чем по коду ошибку искать

    12/12
    Ответить Цитировать
    0
  • Galax, это не лично на твой счет, а как пример. "я не мог даже предположить, что проблема может быть в такой безобидной строчке кода." С 1981 работаю на ассемблерах, но не яростно. Даже в них (хотя простейшие же) столько ошибок, что удивляет как еще пока хоть как-то работают современные компиляторы языков высокого уровня, но уже не ровно.)))
    17/20
    Ответить Цитировать
    0
  • Цитата (valeg @ 16.07.21)  

    ну конкретно тут можно в double переложить и умножить на .95 и поставить ордер, у тебя уже биржа посчитает остаток правильный, а там под капотом fixed point

    Ну то есть ты даже простое умножение не можешь выполнить в  fixed point. А что ты будешь делать, если нужно будет выполнить какие-то сложные вычисления с набором произвольных математических функций, которые в частности могут возвращать значения в диапазоне [0, 1]. 

    Цитата (Galax @ 16.07.21)  

    Пришлось для всех вещественных типов вместо проверки на равенство менять на IsZero(OldPos - NewPos).

    Цитата (strkk @ 16.07.21)  

    типа мы считаем что А и B равны только если А - B < 0.0001 (ну или другой предел, важно что не сравнение с 0)

    На всякий случай еще добавлю, что проверка абсолютного отклонения ( abs(x- y) < eps ) не работает при очень больших x, y. Поэтому для больших значений используется относительная проверка:

    double max_xy = max( abs(x) , abs(y) ) ;    

    abs(x - y) < eps * max_xy

    Но она в свою очередь не работает при маленьких значениях (< 1). Чтобы учесть оба случая можно использовать комбинированный подход:

     double max_xy1 = max( { 1.0, abs(x) ,abs(y) } ) ;

     abs(x - y) < eps * max_xy1

    Ну или сделать две разные функции для абсолютной и относительной проверки, если нужны разные eps.

    8/15
    Ответить Цитировать
    0
  • Цитата (Test2 @ 17.07.21)  

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

    У меня такое ощущение, что ты и на русском пишешь как на ассемблере.

    9/15
    Ответить Цитировать
    11
  • Это старая очень известная штука, считай "азбучная истина". На всех языках, никогда не сравнивайте на равенство не целые числа.

    Задайте интересующую вас точность, например e = 10e-8, и тогда сравнение на "равенство" чисел a и b, будет таким:

    abs(a-b) < e

    3/4
    Ответить Цитировать
    3
  • Для точных вычислений всегда используются целые числа.  Например, приведу пример на js. вам надо точно  умножить 2 числа "1.324233" и "2.23423". То формула примерно такая, 

     

     

    let a = 1.23232323

    let b = 2.23232323

    То берем:

    a =  a * Math.pow(10,18) 

    b = b * Math.pow(10,18)

    дальше:

    let c = a*b/Math.pow(10,18)

     Сравнение так же лучше делать в целых числах...

    1/6
    Ответить Цитировать
    1
  • Цитата (CryptoDev @ 31.07.21)  

    Для точных вычислений всегда используются целые числа.  Например, приведу пример на js. вам надо точно  умножить 2 числа "1.324233" и "2.23423". То формула примерно такая, 

     

     

     Сравнение так же лучше делать в целых числах...

    Так а где у тебя целые числа то ?

    10/15
    Ответить Цитировать
    0
  • spirit83, так для справки в js и так работает. (Почему объяснять не вижу смысла). Можешь проверить... Я привел лишь пример. Поставь например 1.2 и 2.2. Сделай сложение посмотри результат.

    2/6
    Ответить Цитировать
    0
  • Цитата (CryptoDev @ 03.08.21)  

    spirit83, так для справки в js и так работает. (Почему объяснять не вижу смысла). Можешь проверить... Я привел лишь пример. Поставь например 1.2 и 2.2. Сделай сложение посмотри результат.

    Что именно работает? И почему ты предлагаешь считать по этой формуле? Ты берешь число типа double умножаешь на Math.pow(10,18) у тебя получается число  типа double. Тут же нет увеличения точности. Как было произведение даблов так и осталось. Можно перемножить сразу без лишних действий.

    11/15
    Ответить Цитировать
    0
  • ну камон, теперь будете 10 страниц обсуждать, как числа в каждом из популярных яп перемножать и складывать нужно?!  

     

    strkk, что-нибудь слышно по новым предложениям? как вообще относишься к предложениям от крупных аутсорс компаний типа luxoft, epam (знаю, что работал там уже, не нашел сходу пример похожего чего-то) etc: если норм оффер, то колл или уже начинает играть и репутация самой компании, стек, позиция и проч?

    27/34
    Ответить Цитировать
    7
  • Цитата (Pivot_Pointer @ 03.08.21)  

    ну камон, теперь будете 10 страниц обсуждать, как числа в каждом из популярных яп перемножать и складывать нужно?!

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

    12/15
    Ответить Цитировать
    1
  • spirit83, В js это будет Number, который не имея дробной части будет интерплетирован как int. 

     

    Вся эта фигня с плавающей точкой происходит изза специфики хранения double в памяти... И что бы её обойти тебе нужно избавится от дробной части. Если типизированный язык, умножение и конвертация в int. В динамическом просто умножение.

    3/6
    Ответить Цитировать
    0
1 88 108 109 110 111 130 162
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.