View Full Version : [JAVA] Math.pow e assegnazione di costanti
andrea.ippo
04-11-2005, 18:00
public static double pow(double a, double b);
ok questo è il metodo di elevamento a potenza a^b, ma se voglio fare un quadrato (evitando di fare a*a) come posso fare (evitando pure di creare una variabile b=2)?
cioè vorrei creare una costante (2) da poter richiamare nel pow per poter fare pow(double a, const 2)...
Grazie per l'aiuto
:)
public static double pow(double a, double b);
ok questo è il metodo di elevamento a potenza a^b, ma se voglio fare un quadrato (evitando di fare a*a) come posso fare (evitando pure di creare una variabile b=2)?
cioè vorrei creare una costante (2) da poter richiamare nel pow per poter fare pow(double a, const 2)...
Grazie per l'aiuto
:)
static final double SQUARE_POW = 2; ?
franksisca
04-11-2005, 18:55
crei una interfaccia e ci metti dentro tutte le costanti che ti servono, tipo:
interface Costanti{
int quadrato=2;
int cubo=3;
...
...
...
}
e poi le richiami così:
Math.pow(a, Costanti.quadrato);
potrebbe sembrare + macchinoso, ma ti assicuro che è un ottimo metodo di lavoro.
andrea.ippo
04-11-2005, 19:01
ok grazie mille a entrambi!!!
spero di risolvere,è proprio ciò che mi serviva
vi farò sapere
Edit: in effetti è macchinoso,per ora provo con a*a ecc... per i quadrati,ma lo terrò a mente per il futuro...piuttosto mi dite cosa sbaglio qui?
import fiji.io.*;
/* Programma che restituisce la radice quadrata della somma di due quadrati. */
class RadSommaQuad{
public static void main(String[] args){
// Dichiarazione delle variabili
Double a;
Double b;
Double s;
// Acquisizione valori;
System.out.println("Inserire il primo numero");
a = Lettore.in.LeggiDouble();
System.out.println("Inserire il secondo numero");
b = Lettore.in.LeggiDouble();
// Calcolo somma quadrati;
s = (a*a)+(b*b);
// Comunicazione del risultato;
System.out.println("Il risultato e': " +rad);
}
// Calcolo della radice;
public static double sqrt(double s);{
Double rad;
rad = sqrt(double s);
}
}
franksisca
04-11-2005, 19:13
dovresti fare così, alla stampa:
System.out.println("Il risultato e': " +sqrt(s));
e poi dimentichi di fare il return
public static double sqrt(double s){
return Math.sqrt(s);
}
andrea.ippo
04-11-2005, 21:22
Risolto così
import fiji.io.*;
/* Programma che restituisce la radice quadrata della somma di due quadrati. */
class RadSommaQuad{
public static void main(String[] args){
// Dichiarazione delle variabili
double a;
double b;
double s;
double r;
// Acquisizione valori;
System.out.println("Inserire il primo numero");
a = Lettore.in.leggiDouble();
System.out.println("Inserire il secondo numero");
b = Lettore.in.leggiDouble();
// Calcolo somma e radice;
s = (a*a)+(b*b);
r = Math.sqrt(s);
System.out.println("Il risultato e': " +r);
}
}
Grazie per l'aiuto
:D
bottomap
05-11-2005, 01:24
Ciao,
Premesso che a*a resta sempre e comunque in genere più veloce rispetto alla pow...
chiamando Math.pow(a,2.0); non scomodi variabili né costanti di classe... puoi fare un wrapper, così come hai fatto per la sqrt, in modo da chiamare pow invece di Math.pow...
Nella seconda funzione (sqrt) c'è anche un ; di troppo prima del corpo della funzione...
Ciaociao :)
andrea.ippo
05-11-2005, 10:33
immaginavo che era più rapido a*a,però per esponenti non interi il metodo che mi consigli è senz'altro rapido
Avevo provato a fare Math.pow(a,2) ma non funzionava perché non trovava la variabile "2" (forse serve anche il .0 come hai scritto tu :confused: )...
Il wrapper sarebbe un sotto-metodo? (Scusa l'ignoranza ma sono un niubbo... :D )
Ciao e grazie ancora :)
franksisca
05-11-2005, 11:34
Avevo provato a fare Math.pow(a,2) ma non funzionava perché non trovava la variabile "2" (forse serve anche il .0 come hai scritto tu :confused: )...
Si, ci va anche il .0 perchè sono numeri double e non int(Conosci la differenza???)
Il wrapper sarebbe un sotto-metodo? (Scusa l'ignoranza ma sono un niubbo... :D )
Non precisamente, in inglese "cuscino", sono metodi, classi o interfaccie così dette perchè permettono di utilizare un qualcosa già presente nella libreria JAVA e di modificarla come meglio si crede, in questo caso tu, se mi concedete il termine, wrapperizzi il metodo pow e lo modifichi come meglio credi.
Comunque, se non ricordo male, nella JDK 1.5, c'è anche l'import statico, cioè se fai import Math.pow puoi utilizzare il metodo pow senza richiamare math( non ricordo la sintassi della chiamata di import statico).
CIAO
bottomap
05-11-2005, 17:36
Ciao,
Si... per charire meglio, un wrapper è una funzione (in genere una serie di funzioni incapsulate in una classe) che avvolgono (to wrap - cuscino? :mbe: ) altre funzioni (in genere di sistema).
Se mastichi un po' di C++, un esempio di wrapper sono le MFC (incapsulano le API di sistema all'interno di una serie di classi di più facile utilizzo)...
Nel tuo caso l'utilizzo è ancora più banale...
Come hai fatto per sqrt dichiari nella tua classe la funzione sqrt(), la pow() ed eventuali altre...
Tali funzioni non fanno nient'altro (e questo è ciò che caratterizza una funzione wrapper) che richiamare rispettivamente Math.pow e Math.sqrt (eventualmente, e quando è il caso, cambiando leggermente la lista di parametri in modo da snellire la scrittura).
E tutto questo ha come beneficio (sempre nel tuo caso) di sveltire la scrittura e rendere il programma più compatto.
Purtroppo in Java (in C++ la cosa può essere diversa) tale livello di indirezione ha ovviamente un costo (molto leggero nel tuo caso) in termini di velocità nell'esecuzione delle funzioni... in un ciclo di qualche centinaio di miglaia di chiamate la differenza potrebbe comunque farsi sentire...
Ciaociao :)
andrea.ippo
05-11-2005, 21:10
Grazie per il chiarimento!:)
Ciao :D
franksisca
05-11-2005, 21:54
to wrap - cuscino? :mbe: )
io sapevo così, infatti le chiamo semplicemente classi cuscinetto, e mi sembra anche azzeccato come nome. ;)
bottomap
06-11-2005, 00:29
Ciao,
Definizione curiosa... non l'avevo mai sentita... le ho sempre chiamate wrapper mantenendo la terminologia inglese...
In inglese "to wrap" dovrebbe significare "avvolgere qualcosa"... ed il verbo arriva a comprendere, per sinonimo, "contenere qualcosa".
Il termine "wrapper" ha numerosi significati (genericamente involucro... ma anche, indirettamente, cuscinetto) che indicano in sostanza qualcosa atto a contenere qualcos'altro.
Ciaociao :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.