La funzione restituisce -nan, cioè Not a Number. e l'errore viene lanciato quando si cerca di dividere per -nan. Semmai, il testo dell'errore è semplicemente inadeguato.
La funzione restituisce -nan, cioè Not a Number. e viene lanciato un errore quando si cerca di dividere per -nan. Semmai, il testo dell'errore è semplicemente inadeguato.
Perché mai -0,2 dovrebbe essere -nan ?)
Un'altra funzione di test
In calcolatrice.
1/(-3 ^ 3)
-27
Nelle funzioni mql
double n = 1.0/MathPow(-3.0, 3.0);
Print(n);
-0.03703703703703703
non è -0,2 - nan, ma il risultato di un aumento di grado. Il grado frazionario di un numero (a^m/n) è la radice di grado n di a^m. Se il valore della radice secondaria è negativo, può essere negativo o positivo, in base alla potenza di m e al numero a stesso (che nel mio problema è sempre negativo, quindi è positivo alla potenza positiva di m e negativo alla potenza negativa). Quindi se il valore della radice secondaria è negativo, anche il numero è negativo. La radice di un numero negativo si trova nell'area complessa, quindi non possiamo operare su valori dell'area complessa tramite il solitotipo doppio, che è il motivo per cui l'implementazione standard del grado dà -nan.
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...
Soluzione corretta: la soluzione è nel dominio complesso.
Ma se stiamo parlando di avere diversi rami di soluzioni per parametri di input positivi e negativi, allora abbiamo solo bisogno di definire questi rami prima:
.
Fate una tale funzione e tutto andrà bene ;)
Grazie per la sua risposta dettagliata. Ma per me il calcolo complesso non è adatto al mio problema, quindi molto probabilmente mi limiterò ai numeri naturali e di conseguenza non cadrò nel dominio complesso.
Grazie per la sua risposta dettagliata. Ma per me il calcolo complesso non è adatto al mio problema, quindi probabilmente mi limiterò ai numeri naturali e di conseguenza non cadrò nell'area complessa.
È di questo che sto parlando, e ti ho mostrato specificamente un esempio. Guardate attentamente. Questo esempio è esattamente per il tuo caso.
non è -0,2 - nan, ma il risultato di un grado. La potenza di un numero frazionario (a^m/n) è la radice di grado n di a^m. Se il valore della sotto-radice è negativo, può essere negativo o positivo in base alla potenza di m e al numero a stesso (che nel mio problema è sempre negativo, quindi è positivo a potenza positiva di m e negativo a negativa). Quindi se il valore della radice secondaria è negativo, anche il numero è negativo. La radice di un numero negativo si trova nell'area complessa, quindi non possiamo operare su valori dell'area complessa tramite il solito tipo doppio, che è il motivo per cui l'implementazione standard del grado dà -nan.
Andrey, sì, mi sono espresso male, è chiaro che il risultato dell'elevazione a una potenza restituisce -nan. Ma questo risultato dà luogo a una potenza frazionaria, dove l'intero è zero -0,2 La calcolatrice calcola tutto correttamente.
E anche il test precedente non conta come nella calcolatrice.
Forse le gambe nascono dal fatto che non si può prendere una radice pari da un numero negativo? Sono già un po' confuso... E soprattutto come aggirarlo?
I gradi interi sono determinati semplicemente dalla moltiplicazione (e prendendo l'inverso per gli esponenti negativi), quindi sono facilmente trasferiti alle basi negative. I gradi frazionari sono definiti tramite logaritmo ed esponente: y^x=exp(x*ln(y)) e con i numeri negativi arrivano al piano complesso. Il logaritmo ha un numero infinito di rami e per evitare il fastidio di trovare il ramo giusto, restituiscono NAN.
Grazie per la tua risposta, ma in generale se prendiamo una soluzione aritmeticamente corretta, sembra che solo i numeri complessi possano essere usati per implementare tale soluzione... Nel metodo da voi proposto è necessario rompere il grado in modo che il valore sottostante abbia sempre un grado positivo e la risposta sarà sempre positiva. Ma se si prende senza questo adattamento - si arriva solo ai numeri complessi, infatti secondo il modello algebrico generalmente accettato che io sappia (non sono un matematico di formazione) - la radice di un numero negativo sarà un numero complesso.
utilizzare la formula che ho suggerito sopra.
Ecco la stessa formula:
voidOnStart()
{
int m = 2;
int n = 10;
double result = 1.0/pow(pow(-5.5,m),1.0/n); // result = 0.7110947333604484
Print("result = ",result);
}
ed ecco un esempio di come convertire un doppio in una frazione
-0,2 non è zero per restituire un errore di divisione per zero.
La funzione restituisce -nan, cioè Not a Number. e l'errore viene lanciato quando si cerca di dividere per -nan. Semmai, il testo dell'errore è semplicemente inadeguato.
Soluzione corretta:
soluzione è nel dominio complesso.
Ma se stiamo parlando di avere diversi rami di soluzioni per parametri di input positivi e negativi, dobbiamo solo definire prima questi rami:
.
Fate una tale caratteristica e sarete a posto ;)La funzione restituisce -nan, cioè Not a Number. e viene lanciato un errore quando si cerca di dividere per -nan. Semmai, il testo dell'errore è semplicemente inadeguato.
Perché mai -0,2 dovrebbe essere -nan ?)
Un'altra funzione di test
In calcolatrice.
Nelle funzioni mql
Allora perché diavolo è -0,2 un nan?)
Un'altra funzione di test
In una calcolatrice
In una funzione mql.
non è -0,2 - nan, ma il risultato di un aumento di grado.
Il grado frazionario di un numero (a^m/n) è la radice di grado n di a^m.
Se il valore della radice secondaria è negativo, può essere negativo o positivo, in base alla potenza di m e al numero a stesso (che nel mio problema è sempre negativo, quindi è positivo alla potenza positiva di m e negativo alla potenza negativa). Quindi se il valore della radice secondaria è negativo, anche il numero è negativo. La radice di un numero negativo si trova nell'area complessa, quindi non possiamo operare su valori dell'area complessa tramite il solitotipo doppio, che è il motivo per cui l'implementazione standard del grado dà -nan.
Soluzione corretta: la soluzione è nel dominio complesso.
Ma se stiamo parlando di avere diversi rami di soluzioni per parametri di input positivi e negativi, allora abbiamo solo bisogno di definire questi rami prima:
.
Fate una tale funzione e tutto andrà bene ;)Grazie per la sua risposta dettagliata. Ma per me il calcolo complesso non è adatto al mio problema, quindi molto probabilmente mi limiterò ai numeri naturali e di conseguenza non cadrò nel dominio complesso.
Grazie per la sua risposta dettagliata. Ma per me il calcolo complesso non è adatto al mio problema, quindi probabilmente mi limiterò ai numeri naturali e di conseguenza non cadrò nell'area complessa.
È di questo che sto parlando, e ti ho mostrato specificamente un esempio. Guardate attentamente. Questo esempio è esattamente per il tuo caso.
zy
tradurre in µl è molto facile
non è -0,2 - nan, ma il risultato di un grado.
La potenza di un numero frazionario (a^m/n) è la radice di grado n di a^m.
Se il valore della sotto-radice è negativo, può essere negativo o positivo in base alla potenza di m e al numero a stesso (che nel mio problema è sempre negativo, quindi è positivo a potenza positiva di m e negativo a negativa). Quindi se il valore della radice secondaria è negativo, anche il numero è negativo. La radice di un numero negativo si trova nell'area complessa, quindi non possiamo operare su valori dell'area complessa tramite il solito tipo doppio, che è il motivo per cui l'implementazione standard del grado dà -nan.
Andrey, sì, mi sono espresso male, è chiaro che il risultato dell'elevazione a una potenza restituisce -nan.
Ma questo risultato dà luogo a una potenza frazionaria, dove l'intero è zero -0,2
La calcolatrice calcola tutto correttamente.
E anche il test precedente non conta come nella calcolatrice.
È di questo che sto parlando, e ti ho fatto un esempio specifico. Guardate bene.
Sì, ho capito, grazie. (anche una formula è scritta)
Forse le gambe nascono dal fatto che non si può prendere una radice pari da un numero negativo? Sono già un po' confuso... E soprattutto come aggirarlo?
I gradi interi sono determinati semplicemente dalla moltiplicazione (e prendendo l'inverso per gli esponenti negativi), quindi sono facilmente trasferiti alle basi negative. I gradi frazionari sono definiti tramite logaritmo ed esponente: y^x=exp(x*ln(y)) e con i numeri negativi arrivano al piano complesso. Il logaritmo ha un numero infinito di rami e per evitare il fastidio di trovare il ramo giusto, restituiscono NAN.
Grazie per la tua risposta, ma in generale se prendiamo una soluzione aritmeticamente corretta, sembra che solo i numeri complessi possano essere usati per implementare tale soluzione... Nel metodo da voi proposto è necessario rompere il grado in modo che il valore sottostante abbia sempre un grado positivo e la risposta sarà sempre positiva. Ma se si prende senza questo adattamento - si arriva solo ai numeri complessi, infatti secondo il modello algebrico generalmente accettato che io sappia (non sono un matematico di formazione) - la radice di un numero negativo sarà un numero complesso.
utilizzare la formula che ho suggerito sopra.
Ecco la stessa formula:
ed ecco un esempio di come convertire un doppio in una frazione
https://www.mql5.com/ru/forum/290279#comment_9396706