Текущий архив: 2006.06.18;
Скачать: CL | DM;
ВнизЧисло со степенью двойки. Найти похожие ветки
← →
Юрий Зотов © (2006-05-21 22:02) [40]> ArtemESC © (21.05.06 21:50) [38]
А черт его знает, не помню уже. Эта (или какая-то похожая) задачка когда-то встретилась мне в реале, причем функции Trunc не было, а писать двухкилометровый if - это бред, естественно. Не помню точно, в чем там был фокус, но помню, что с полчаса мозги поломать пришлось, и получилось какое-то простое и красивое решение.
> MBo © (21.05.06 21:53) [39]
Да, описка, там N-1 должно быть, конечно.
← →
SergP © (2006-05-21 23:04) [41]
> if i and (i-1) = 0 then
В принципе работает. Только есть одно число с которым оно не будет работать.
← →
MBo © (2006-05-21 23:34) [42]>Юрий Зотов © (21.05.06 21:36) [37]
Не обрабатываются NaN и выход за диапазон:function QuasiTrunc(s: Single): DWord;
var
access: Integer;
fexp: ShortInt;
Mant: Int64;
begin
access := PInteger(@s)^;
fexp := ((access shr 23) and $FF) - 127;
if fexp < 0 then
Result := 0
else begin
Mant := (access and $7FFFFF) or $800000;
Result := (Mant shl fexp) shr 23;
end;
end;
← →
ArtemESC © (2006-05-22 00:56) [43]SergP © (21.05.06 23:04) [41]
Ноль?
← →
ArtemESC © (2006-05-22 00:57) [44]Юрий Зотов © (21.05.06 22:02) [40]
Trunc не было...
А что было, то? Что можно использовать?
← →
vidiv © (2006-05-22 06:27) [45]
> Еще немного подумайте, и узнаете как доставать самый младший
> ненулевой бит.
1 ?
← →
SergP © (2006-05-22 08:12) [46]
> ArtemESC © (22.05.06 00:56) [43]
> SergP © (21.05.06 23:04) [41]
> Ноль?
Ага... Ноль не есть степенью как двойки, так вообще любого другого числа...
← →
TUser © (2006-05-22 09:25) [47]2all
Числа могут быть отрицательными :(
← →
Marser © (2006-05-22 11:43) [48]> [46] SergP © (22.05.06 08:12)
>
> > ArtemESC © (22.05.06 00:56) [43]
> > SergP © (21.05.06 23:04) [41]
> > Ноль?
>
>
> Ага... Ноль не есть степенью как двойки, так вообще любого
> другого числа...
Да, такой недостаток имеется. Правда устраняется он введением ещё одного условия.
Страницы: 1 2 вся ветка
Текущий архив: 2006.06.18;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.011 c