?

Log in

No account? Create an account

Округленческое: результаты - Общество дровосеков Бердичева по изучению Мишны

Dec. 18th, 2014

03:28 pm - Округленческое: результаты

Previous Entry Share Next Entry

Расслабился народ, не хочет этюд для программистов исполнять.


#include <cstdio>

template< class Div, class Quot, class Mult, class Res > void Rounding(const char * s) {
        volatile Quot quot;
        volatile Res res;
        int less = 0, greater = 0;
        for (int i = 3; i <= 1000001; i += 2) {
                quot = (Div)1.0 / i;
                res = (Mult)quot*i;
                if (res < 1.0) ++less;
                else if (res > 1.0) ++greater;
        }
        printf("%s: Less = %.3f%%, Greater = %.3f%%\n", s, less/5000.0, greater/5000.0);
}

typedef double D;
typedef long double L;

#define r(a,b,c,d) Rounding< a,b,c,d > (#a#b#c#d)

main() {
    r(D,D,D,D);
    r(D,D,D,L);
    r(D,D,L,D);
    r(D,D,L,L);
    r(D,L,D,D);
    r(D,L,D,L);
    r(D,L,L,D);
    r(D,L,L,L);
    r(L,D,D,D);
    r(L,D,D,L);
    r(L,D,L,D);
    r(L,D,L,L);
    r(L,L,D,D);
    r(L,L,D,L);
    r(L,L,L,D);
    r(L,L,L,L);
}


Компилируем (для x86_64), запускаем и наслаждаемся результатами, обнаруживая, что для каждого параметра найдется хотя бы один случай, когда этот параметр влияет на результат.
DDDD: Less = 14.857%, Greater = 0.000%
DDDL: Less = 14.857%, Greater = 0.000%
DDLD: Less = 14.840%, Greater = 0.000%
DDLL: Less = 50.026%, Greater = 49.893%
DLDD: Less = 14.857%, Greater = 0.000%
DLDL: Less = 14.857%, Greater = 0.000%
DLLD: Less = 14.840%, Greater = 0.000%
DLLL: Less = 50.026%, Greater = 49.893%
LDDD: Less = 14.867%, Greater = 0.000%
LDDL: Less = 14.867%, Greater = 0.000%
LDLD: Less = 14.850%, Greater = 0.000%
LDLL: Less = 50.036%, Greater = 49.882%
LLDD: Less = 14.867%, Greater = 0.000%
LLDL: Less = 14.867%, Greater = 0.000%
LLLD: Less = 0.000%, Greater = 0.000%
LLLL: Less = 14.881%, Greater = 0.000%

Итого 8 разных вариантов.

Потом компилируем, запрещая SSE, запускаем и наслаждаемся результатами еще раз (это уж сами; попробуйте сначала угадать, что будет).

Comments:

[User Picture]
From:dvv
Date:December 20th, 2014 12:58 am (UTC)
(Link)
Меня больше прикалывает, как наличие/отсутствие volatile на результаты сказывается.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:December 20th, 2014 01:00 am (UTC)
(Link)
Это-то понятно, без volatile компилятор что хотит, то и воротит.
(Reply) (Parent) (Thread)