hedgewars/uFloat.pas
changeset 8916 71485c03a507
parent 8915 36e1574e989d
child 8917 263f2a8475bc
equal deleted inserted replaced
8915:36e1574e989d 8916:71485c03a507
   316 var t: hwFloat;
   316 var t: hwFloat;
   317 begin
   317 begin
   318 z.isNegative:= z1.isNegative xor z2.isNegative;
   318 z.isNegative:= z1.isNegative xor z2.isNegative;
   319 z.Round:= z1.QWordValue div z2.QWordValue;
   319 z.Round:= z1.QWordValue div z2.QWordValue;
   320 t:= z1 - z2 * z.Round;
   320 t:= z1 - z2 * z.Round;
   321 if t.QWordValue = 0 then
   321 z.Frac:= 0;
   322     z.Frac:= 0
   322 
   323 else
   323 if t.QWordValue <> 0 then
   324     begin
   324     begin
   325     while ((t.QWordValue and $8000000000000000) = 0) and ((z2.QWordValue and $8000000000000000) = 0) do
   325     while ((t.QWordValue and $FF00000000000000) = 0) and ((z2.QWordValue and $FF00000000000000) = 0) do
   326         begin
   326         begin
   327         t.QWordValue:= t.QWordValue shl 1;
   327         t.QWordValue:= t.QWordValue shl 8;
   328         z2.QWordValue:= z2.QWordValue shl 1
   328         z2.QWordValue:= z2.QWordValue shl 8
   329         end;
   329         end;
       
   330         
   330     if z2.Round > 0 then
   331     if z2.Round > 0 then
   331         z.Frac:= (t.QWordValue) div (z2.Round)
   332         inc(z.QWordValue, t.QWordValue div z2.Round);
   332     else
       
   333         z.Frac:= 0
       
   334     end
   333     end
   335 end;
   334 end;
   336 
   335 
   337 operator / (const z1: hwFloat; const z2: LongInt) z : hwFloat; inline;
   336 operator / (const z1: hwFloat; const z2: LongInt) z : hwFloat; inline;
   338 begin
   337 begin