Tek satır kodla sinus hesaplama integer.

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

Kod:
   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
    Log2.zip
    64.7 KB · Görüntüleme: 144
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
 
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.
 
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:
 

Forum istatistikleri

Konular
7,650
Mesajlar
127,624
Üyeler
3,096
Son üye
elektronikcisayılır

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top