Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.53 MB
Время: 0.029 c
3-1145623187
AndreyAR
2006-04-21 16:39
2006.06.18
Программный запуск DTS Package


6-1139760370
Shamansky
2006-02-12 19:06
2006.06.18
TUdpSocket


2-1149092376
Loginov Dmitry
2006-05-31 20:19
2006.06.18
Работа с пакетами


3-1145961078
Alpine
2006-04-25 14:31
2006.06.18
Вопрос по тригерам


15-1147685730
SamProf
2006-05-15 13:35
2006.06.18
Не могу поставит Delphi 8




   Наверх