Целая часть double в int
От: CL0NE Украина  
Дата: 30.08.10 10:44
Оценка:
задача:

Let T[i] denote the i-th element of the table, which
is equal to the integer part of 4294967296 times abs(sin(i)), where i
is in radians.

немного посчитав, становится ясно, что результат запросто уложится int32 (4294967296 = 2^32, а все синусы до 64 никак не дадут единицы).
Максимальные значения в диапазоне дадут только:
i    sin    4294967296 * abs(sin(i))
----------------------------------------
11    0,99    4294925233,46   FFFF5BB1
33    0,99    4294588738,04    FFFA3942
55    0,99    4293915773,58    FFEFF47D


Поэтому, не нашел ничего разумнее, как привести к int-у дабы отсечь дробную часть.
    int32_t T[64];
    for(int i=0; i < 64; ++i)
    {
        T[i] = static_cast<int>(4294967296.0 * fabs(sin(i)));
        printf("%d\t%x\n", T[i], T[i]);
    }

Однако вывод не соответствовал ожидаемому:

0       0
-2147483648     80000000
-2147483648     80000000
606105819       242070db
-2147483648     80000000
-2147483648     80000000
1200080426      4787c62a
-2147483648     80000000
-2147483648     80000000
1770035416      698098d8
-2147483648     80000000
-2147483648     80000000
-2147483648     80000000
1804603682      6b901122

Естессно можно использовать константы, но все же, вопрос, как правильно вытащить вще int целую часть double?
целая часть double int
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.