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: 36
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.
 

Forum istatistikleri

Konular
5,897
Mesajlar
100,674
Üyeler
2,496
Son üye
can12

Son kaynaklar

Son profil mesajları

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?
gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top