Mikro Step
Kıdemli Üye
- Katılım
- 25 Eylül 2022
- Mesajlar
- 5,895
2 li sistemde logaritma alirsan cok kisa kodla isi bitirirsin.
10 tabaninda log almak icin log2 den log10'a gecersin.
10 tabaninda log almak icin log2 den log10'a gecersin.
Evet fpu da log ve pow alma işlemleri var bir de arcsin arccos hepsine nasipse el atacağım.Hocam float sayıların logaritmaları içinde böyle bir çalışma bekliyorum programın bir yerinde log fonskiyonunu çağırmamla 5kb alan gidiyor taylor açılımı falan denedim ama iterasyon çok yüksek oluyor
float log2(int ssy)
{
int syp=ssy; int i=0; float lgg=0.0f; DWORD sdg=0x80000000; DWORD qu=31;
for(int c=0;c<31;c++) { syp<<=1; qu-=1; sdg>>=1; if(syp<0) break; }
float bol=sdg*2.265625f; float x=ssy-sdg;
float ss=x; ss/=bol+(x*0.36f); ss=(ss)/(ss+1.0f); ss*=((bol+x*0.36f)/sdg)+1.0f;
ss+=qu;
return ss;
}
procedure TForm1.Button1Click(Sender: TObject);
Label Ara;
var
xx:real;
x,y,b:int64;
i:integer;
begin
memo1.Text:='';
y:=0;
b:=65536 div 2;
xx:=StrToFloat(Edit1.text);
x:=trunc(xx*65536);
while x<65536 do
begin
x:=2*x;
y:=y-65536;
end;
while x>=(2*65536) do
begin
x:=x div 2;
y:=y+65536;
end;
Ara:
while b>0 do
begin
x:=(x*x) div 65536;
if x>=(2*65536) then
begin
x:=x div 2;
y:=y+b;
end;
b:=b div 2;
memo1.lines.Add('Y:'+FloatToStr(y/65536));
refresh;
end;
memo1.lines.Add('');
memo1.lines.Add('L:'+FloatToStr(log2(xx)));
end;
Hocam konumuz bu zaten , kodda nerede ? yada matemetiksel ifadesi ne?log 3, log 5 islemleri de senin matematik ve logaritma bilgine kalmis.