1. C++ / Говнокод #10120

    +25

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    /*
        Шаг по оси, представляет собой число из следующего ряда:
        ... 0.02 0.05 0.1 0.2 0.5 1 2 5 ...
        next и prev позволяют перемещаться в обе стороны по ряду
        после создания хранится число 1
    */
    class Step
    {
    public:
        Step()
        {
            scale = 1; pr = 1; type=0;
        }
        void next()
        {
            // шаг вперед
            type++;
            if (type==1)
                scale = pr * 2;
            else if (type==2)
                scale = pr * 5;
            else
            {
                type = 0;
                pr *= 10;
                scale = pr;
            }
        }
        void prev()
        {
            // шаг назад
            type--;
            if (type==0)
                scale = pr;
            else if (type==1)
                scale = pr*2;
            else
            {
                type = 2;
                pr /= 10;
                scale = pr*5;
            }
        }
        operator float()
        {
            return scale;
        }
    protected:
        float scale;    // текущее значение
        float pr;       // недомноженое значение 1 10 100 ...
        int type;       // 0 - x1 1 - x2 2 - x5
    };

    http://govnokod.ru/10117 напомнил о том, как я когда-то рисовал график, и для меток на осях потребовались те же самые красивые значения [... 0.1 0.2 0.5 1 2 5 ...]

    Запостил: bormand, 30 Апреля 2012

    Комментарии (20) RSS

    • Операции с плавающей точкой особого оптимизма не внушают.
      Нельзя сделать тип со степенями для 2, 5 и флагом какую использовать для next / prev? Отдельно ф-ию, возвращающую уже число, ее в map.
      Ответить
      • В тех пределах, в которых использовались эти next и prev (подбор оптимальной цены деления на графике) погрешность еще не успевала накопиться, поэтому я забил и оставил этот говнокод.

        А в идеале наверное да, сделать pr int'ом, и хранить в нем степень десятки, и при необходимости домножать ее на 1, 2 или 5.
        Ответить
    • Следующий ряд даже название имеет: ряд предпочтительных чисел или ряд Ренара:
      https://ru.wikipedia.org/wiki/Ряды_предпочтительных_чисел_(в_технике)

      При n=2 получим 1 3 10 30 100 300 1000...
      При n=3 получим 1 2 5 10 20 50 100 200 500...
      При n=4 получим 1 2 3 6 10 20 30 60 100 200 300 600...
      При n=5 получим 1 1,6 2,5 4 6,3 10 16 25 40 63 100...
      При n=6 получим 1 1,5 2 3 5 7 10 15 20 30 50 70 100...
      При n=7 получим 1 1,4 1,9 2,7 3,7 5,2 7,2 10...
      При n=8 получим 1 1,3 1,8 2,3 3,2 4,2 5,6 7,5 10...
      При n=9 получим 1 1,3 1,7 2,2 2,8 3,6 4,6 6 7,7 10...
      При n=10 получим 1 1,3 1,6 2 2,5 3,2 4 5 6,3 8 10...
      Отдельные множители можно корректировать, чтобы получать более красивые числа.

      Слабо́ написать класс для произвольного n, а также для принятых в технике рядов сопротивлений, диаметров резьбы и т. п.?
      Ответить
      • P.S. Странно, что в Гитхабе поиском фраз «preferred numbers» и «renard numbers» удалось найти всего два модуля и оба напитоне:
        https://github.com/matt-hayden/PreferredNumbers
        https://github.com/matbra/preferred_numbers
        Ответить
      • Ну тут не один класс, наверное, надо... А по одному на каждую группу чисел.
        Ответить
        • Ага. Оказывается, для n=5;10;20;40;80;160 есть вореции стандарта: R10, R'10, R''10, Ra10 (отличаются интенсивностью округления относительно точного значения корня n-й степени).

          Кстати, я нашёл две линейки стандартов:
          1) n=5;10;20;40;80;160 (включая вариации со штрихом, с двумя штрихами и с буквой «a») для линейных размеров (ISO/DIN/ГОСТ).
          2) n=6;12;24;48;96;192 для сопротивлений (IEC a. k. a. МЭК).

          Для n < 5 ряды довольно простые. А есть ли стандарты для остальных значений n?
          Ответить
          • > для сопротивлений
            Хм, там же вроде Е-ряды были?

            З.Ы. В детстве всегда удивлялся, почему у резисторов такие кривые номиналы - 470, 560, 820, 680 и т.п.
            Ответить
            • Ага.

              E6  ( 20%): 10      15      22      33      47      68
              E12 ( 10%): 10  12  15  18  22  27  33  39  47  56  68  82
              E24 (  5%): 10  12  15  18  22  27  33  39  47  56  68  82
                            11  13  16  20  24  30  36  43  51  62  75  91
              
              E48  ( 2%): 100  121  147  178  215  261  316  383  464  562  681  825
                           105  127  154  187  226  274  332  402  487  590  715  866
                            110  133  162  196  237  287  348  422  511  619  750  909
                             115  140  169  205  249  301  365  442  536  649  787  953
              
              E96 (  1%): 100  121  147  178  215  261  316  383  464  562  681  825
                           102  124  150  182  221  267  324  392  475  576  698  845
                            105  127  154  187  226  274  332  402  487  590  715  866
                             107  130  158  191  232  280  340  412  499  604  732  887
                              110  133  162  196  237  287  348  422  511  619  750  909
                               113  137  165  200  243  294  357  432  523  634  768  931
                                115  140  169  205  249  301  365  442  536  649  787  953
                                 118  143  174  210  255  309  374  453  549  665  806  976

              Обычно видел из ряда E24. Но несколько раз попадались из E96 (в делителе, задающем образцовое напряжение в блоке питания).
              Ответить
      • Кобенеции
        Ответить
      • > диаметров резьбы
        Вот с диаметрами резьбы и теми же пинами микросхем вообще жопа - где-то метрические, где-то пиндосские...
        Ответить
        • Действительно. Диаметры болтов обычно ложатся на ряды Ренара для метрической системы, а диаметры труб почему-то измеряются в степенях двойки от дюйма.

          А у микросхем вообще одна и та же серия может иметь модификации в разных корпусах, один корпус в метрической системе, другой — в пиндосской.
          Ответить
    • - Ну вот, - отвечает, - это и есть моя главная проблема на сегодняшний день: как сделать так, чтобы даже поллюций не было.
      Ответить
    • Потом ее перевернули на живот, и стали трахать в попу, снова один за другим, матерясь и нанося удар за ударом.
      Ответить
    • Нет, главное к подружкам своим, таким же потаскушкам, она меня не ревновала, к проституткам каких иногда приводил прямо домой, в те дни, когда она была «занята» тоже, а тут, к матери родной ревнует!
      Ответить
    • Эта история произошла со мной, когда мне едва исполнилось 18 лет. Я рос без отца, наверное, поэтому мне не хватало твердости в характере. Я был очень податливым и легко поддавался чужому влиянию.
      Ответить
    • Нет, главное к подружкам своим, таким же потаскушкам, она меня не ревновала, к проституткам каких иногда приводил прямо домой, в те дни, когда она была «занята» тоже, а тут, к матери родной ревнует!
      Ответить
    • Шел очередной год моего обучения, если сказать точнее, то начало третьего года. В нашу группу перевелся парень Слава, как он сказал, в прошлой группе у него не задались отношения с одногрупниками
      Ответить
    • Шел очередной год моего обучения, если сказать точнее, то начало третьего года. В нашу группу перевелся парень Слава, как он сказал, в прошлой группе у него не задались отношения с одногрупниками
      Ответить
    • О, как же она сосала, она то водила губами по моему члену, то просто заглатывала его глубоко, то лизала его как мороженое, в общем я был в восторге.
      Ответить

    Добавить комментарий