uzeri sayı hesabı

Başlatan Maxim, 30 Ağustos 2009, 11:41:02

Maxim

protonda kestirme bir komut varmı acaba bu iş için ?
baktım baktım yok heralde .

mesela 12 üzeri 4 = 20736 yı bulmak için sayıyı birbiriyle çarpmadan bulmaya yarayan kestirme bir komut ?

selamlar

XX_CİHAN_XX

hocam hazır fonksiyon var mı bilmiyorum ama bu iş için sayının kendisini diğer sayı kadar çarpmak yerine kaydırmalar ve toplama - çıkarmalarla daha hızlı çalışan ve daha az yer kaplıyan bir fonksiyon yazmak mümkün olabilir.  :roll:
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Maxim

mesela nasıl yapabilirim ?
bana gereken x uzeri 6 ya kadar olan sayı sonuçta .

girişim daha doğrusu x analog giriş değeri
0-5 volt olabilir , 0 -5000 olabilir

XX_CİHAN_XX

tam olarak anlamak için soruyorum belki kestirme bir çözüm uydurulabilir çünki;
0-5v arası sadece tamsayı değerlerin ve yine sadece 6. kuvvetlerini almanız gerekiyorsa olay bu 5 konum için basit bir tablo çıkarmaya bakar.
Ara değerler varsa tablo kullanıp kullanmama durumu bu ara değerlerin çözünürlüğü ile alakalı bir durum ama her halukarda müthiş hız ve kod hafifliği sağlayacaktır. sayı 5 ten çok daha büyükse 6. kuvvetini almak baya ciddi bir sonuca ulaşmak demektir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Maxim

eğer eksik bilgi verdiysem kusuruma bakma lütfen ,
detay geçeyim .

tablo işime yaramıyor, değerler çok değişken ve hassas ,
kullanmam gereken şöyle bir formül var ,
dediğim gibi x analog girişindeki voltaj değeri
bu değer 1.000 voltta olabilir, 3.453 voltta

sonuc = 0.1046x6 - 1.9599x5 + 14.454x4 + 172.15

bu formülün hem hızlı hemde az yer kaplaması için uğraşıyorum,
amacım,
başka ne yapabilirim araştırmak?
belki daha iyi çözümler vardır ?

XX_CİHAN_XX

Hocam sayılar tahminimden daha hasasmış. İşlemlerde öyle.
Bu işi C de pow fonksiyonu yapıyor.
#include	<math.h>
#include	<errno.h>

double
pow(double x, double y)
{
	unsigned char	sign = 0;
	unsigned long	yi;
	
	if(x == 0.0) {
		if (y <= 0.0) {
			errno = EDOM;
		}
		return 0.0;
	}
	if(y == 0.0)
		return 1.0;
	if(x < 0.0) {
		yi = (unsigned long)y;
		if(yi != y) {
			errno = EDOM;
			return 0.0;
		}
		sign = yi & 1;
		x = -x;
	}
	x = exp(log(x) * y);
	if(sign)
		return -x;
	return x;
}

Buda errno.h
#define	EINVAL	1
#define	ENOENT	2
#define	NOPATH	3
#define	EMFILE	4
#define	EACCESS	5
#define	EBADF	6
#define	EMCBD	7
#define	ENOMEM	8
#define	EIMBA	9
#define	EINVENV	10
#define	ENOEXEC	11
#define	EPERM	12
#define	EDATA	13
#define	EDRIVE	15
#define	ECURDIR	16
#define	EXDEV	17
#define	ENFILE	18

#define	EDOM	33	/* Domain error */
#define	ERANGE	34	/* Range error */

extern int errno;


Burada x üzeri y değeri döndürlür.
Basic tede pow gibi (belki aynı adda) bir fonksiyon vardır mutlaka, yoksa bile yukarıdaki kodları basic programınıza uygun şekilde çevirebilirsiniz.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

OG

Doğrudur POW var. 12 ve 14 bitlerde kullanılmıyormuş.

Alıntı YapSyntax

Assignment Variable = POW Variable , Pow Variable

Overview

Computes Variable to the power of Pow Variable.

Operators

Assignment Variable - any valid variable type.
Variable - a constant, variable or expression.
Pow Variable a constant, variable or expression.
Example

INCLUDE "PROTON18_4.INC"     ' Use the PROTON board for the demo          
DEVICE = 18F452              ' Choose a 16-bit core device
DIM POW_OF as FLOAT
DIM FLOATIN as FLOAT         ' Holds the value to POW with
DIM FLOATOUT as FLOAT        ' Holds the result of the POW
DELAYMS 500                  ' Wait for the PICmicro to stabilise
CLS                          ' Clear the LCD
POW_OF = 10
FLOATIN = 2                  ' Load the variable
FLOATOUT = POW FLOATIN,POW_OF ' Extract the POW of the value
PRINT DEC FLOATOUT           ' Display the result
STOP

Notes

Pow is not implemented with 12, or 14-bit core devices, however, with the extra functionality, and more linear memory offered by the 16-bit core devices, full 32-bit floating point power of is implemented.

Floating point trigonometry is extremely memory hungry, so do not be surprised if a large chunk of the PICmicro is used with a single operator. This also means that floating point trigonometry is comparatively slow to operate.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Maxim

teşekkürler ,
bakayım pow nedir? ne değildir.

Maxim

ohoo pow uçmuş , hem çok yer kaplıyor hemde 18 serisi istiyor.

12 üzeri 4 hesabı..


778 byte
Include "PROTON18_4.INC"     ' Use the PROTON board for the demo          
Device = 18F452              
Dim SONUC As Float
Cls   
                       
Print Dec SONUC          
Stop




2922 byte
Include "PROTON18_4.INC"     ' Use the PROTON board for the demo          
Device = 18F452            
Dim SONUC As Float
Cls                          

SONUC = Pow 12,4 
Print Dec SONUC           
Stop




1000 byte
Include "PROTON18_4.INC"     ' Use the PROTON board for the demo          
Device = 18F452              
Dim SONUC As Float
Cls   

SONUC = 12*12*12
SONUC =SONUC * 12
Print Dec SONUC          
Stop

XX_CİHAN_XX

HiTech te aynı sayılır :)
Ama 16 serisi için kullanılabiliyor.
12 üzeri 4 işlemi için (16 serisinde) harcadığı alan :   1841
Ancak 18 serisi için daha az yer kaplayabilir çünkü orada bazı işlemler donanımsal olarak pratik yapılabiliyor. Fakat 16 serisi için kapladığı alan böyle. Hız ve alan sorunu varsa daha güçlü bir pic yada 2. bir pic kullanmanız gerekecek gibi gözüküyor .
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

Ancak şu var 12 üzeri 4te de 1841 kadar alan kaplıyor
12 üzeri 10da da , 12 üzeri 1de de :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Maxim

Alıntı yapılan: "XX_CİHAN_XX"Ancak şu var 12 üzeri 4te de 1841 kadar alan kaplıyor
12 üzeri 10da da , 12 üzeri 1de de :)

pow komutu protonda da aynı ,
uzeri 3 de , uzeri 10 da aynı yer kaplıyor

muhittin_kaplan

dim SAYI as word
dim US as byte
Dim TEMP as byte
Dim DONGU As Byte

TEMP=SAYI
for DONGU=0 to US
    SAYI=SAYI*TEMP
Next


Denemedim Ama Çalışması Gerek Gibi

XX_CİHAN_XX

Alıntı yapılan: "maxiboost"protonda kestirme bir komut varmı acaba bu iş için ?
baktım baktım yok heralde .

mesela 12 üzeri 4 = 20736 yı bulmak için sayıyı birbiriyle çarpmadan bulmaya yarayan kestirme bir komut ?

selamlar
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

muhittin_kaplan