Кресты / Говнокод #10120 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 bormand, (Updated )

Комментарии (15) 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, а также для принятых в технике рядов сопротивлений, диаметров резьбы и т. п.?
    Ответить
    • Ну тут не один класс, наверное, надо... А по одному на каждую группу чисел.
      Ответить
      • Ага. Оказывается, для 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 (в делителе, задающем образцовое напряжение в блоке питания).
            Ответить
    • > диаметров резьбы
      Вот с диаметрами резьбы и теми же пинами микросхем вообще жопа - где-то метрические, где-то пиндосские...
      Ответить
      • Действительно. Диаметры болтов обычно ложатся на ряды Ренара для метрической системы, а диаметры труб почему-то измеряются в степенях двойки от дюйма.

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

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8