Tek satır kodla sinus hesaplama integer.

2 li sistemde logaritma alirsan cok kisa kodla isi bitirirsin.
10 tabaninda log almak icin log2 den log10'a gecersin.
 
Hocam doğru söylüyosunuz c'nin standart kütüphaneside bunu yapıyor ama log2 yi çağırsamda büyük bir bellek kullanıyor
 
Hocam float sayıların logaritmaları içinde böyle bir çalışma bekliyorum :D programın bir yerinde log fonskiyonunu çağırmamla 5kb alan gidiyor :D taylor açılımı falan denedim ama iterasyon çok yüksek oluyor
Evet fpu da log ve pow alma işlemleri var bir de arcsin arccos hepsine nasipse el atacağım.
 
Log hesapladım 2 tabanında fakat tam çıkmadı on binde 1 hata yapıyor sayısına göre yine uğraştıracak

log2:
   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;
    }

resim_2024-01-28_153112819.png
 

Ekler

  • Log2.zip
    64.7 KB · Görüntüleme: 97
Float islemleri unutmalisin.

Asagidaki islemlerde float satirlar sadece bizlerin gorup sonucu yorumlayabilmemiz icin,

Kod:
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;

1706445806148.png
 
Hocam ne yaptın çok uzun sürer :katil2: 65535 den büyük sayıyı logluyor mu herlhalde 1 gün sürer, 16 bit ayrı ayrı mı logluyorsun
 
65536 dedigin 16 satir. Debug amacli loglatmistim. Begenmediysen o satiri sil at.
 
Verdigim kod blogu hesapliyor iste.

2li tabanda logaritma en basit islem.

log 1 =0
log 2 =1
log 4 =2
log 8 =3

sonuc dogrudan sayinin bit pozisyonu.

Mesela 2 demek 010 demek.
2. bit 0
1. bit 1
0. bit 0

O halde log2 = 1

log 3, log 5 islemleri de senin matematik ve logaritma bilgine kalmis.
 
Bu algoritmayi buyuk buyuk dedemiz Iranli bir matematikci olusturmus.

Biraz incelersen cok basit bir mantigi var.

Ayrica, senin verdigin algoritmalar cok mu anlasilir da benden hesap soruyorsun? :cool:
 
Saf C veriyorum ayrıca birbiri ile alakalı kodları yan yana yazıyorum daha okunur oluyor , derlenebilir bile devc++ derle,

Sen yoksa c bilmiyor musun ? bi baksan 1 günde öğrenirsin ,winapi ile ilgili bir problemin varsa öm yada burada sorabilirsin , delphi boktan ya. @nt için de geçerli.
 
Delphide

begin yerine {
end yerine }

:= yerine =
== yerine de = yazacaksin olacak sana C
 
Niye boşuna uğraşıyorsun delphi ile o zaman, alışkanlık diyelim .

Senin kodda 10 dan başlamış ve bir sayı toplayarak gitmişsin daha sonra tersini alıp hesap doğrumu diye bakmışsın peki kaç döngüde bitiyor bu bikaç yüzbin :katil2:

Bulan iranlının ismi ne ayrıca neden dedemiz olsun ki iranlı adam :katil2:
 
int y, b;

y=0;
b=32768;
// xx logaritmasini alacagin float deger
x=(long int) xx*65536;

while x<65536 { x*:=2; y-:=-65536;

while (x>=(2*65536)) { x/=2; y+=65536; }
Ara:
while (b>0) { x=(x*x)>>16; if (x>=(2*65536)) { x/=2; y+=b;}
b/= 2;
}
 
Yanlız adamlar o zamanda bu döngüleri nasıl hesaplamış .

Düşüne düşüne beyin sinirleri değişime uğrayıp bildiğin CPU gibi işlem yapmaya başlamış :katil2:

Bi ara yüz basamaklı sayının karekökünü hesaplayan adam vardı :katil2:
 
@devreci Sen de yazabilirsin. Ama C ile olmaz. Daha dogrusu kutuphanesiz olmaz. Daha da dogrusu kutuphaneyi de C ile yazacam dersen olmaz
Ama ASM ile olur.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,950
Mesajlar
118,718
Üyeler
2,822
Son üye
lalemasall

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top