Forum
>>
Programmazione Python
>>
Calcolo scientifico
>>
Notazione Scientifica
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da claugo |
2020-08-02 12:28:31 - Notazione Scientifica
|
Buon Giorno a tutti
Vorrei sottoporre questo problema di divisione di numeri grandi in quanto python non li gestisce bene. Il problema è questo..... Dato un numero 342638197292754979757 il quale è divisibile per 37 e che da come risultato 9260491818723107561 su una calcolatrice normale. In python 3 invece si verifica la seguente condizione... Se io divido il numero in questo modo a=int(n/37) e lo rimoltiplico per 37, il risultato è questo 342638197292754952192. la funzione (Int) naturalmente serve per verificare che faccia la divisione e la moltiplicazione giusta in quanto (int) arrotonda all'intero, ma essendo gia il risultato un intero non dovrebbe arrotondare niente e rimoltliplicandolo per lo stesso moltiplicatore riportarlo al valore originale. Ringrazio chiunque voglia rispondere a questo quesito |
|
Scritto da ㎝ |
2020-08-02 12:39:52 - Re: Notazione Scientifica
|
L'operatore `/` converte il tuo intero in un float, ed effettua una divisione approssimata secondo le regole dello standard IEEE 754; da cui la perdita di precisione che rilevi.
In questo caso dovresti utilizzare l'operatore di divisione intera `//` >>> 342638197292754979757 // 37 9_260_491_818_723_107_561 >>> _ * 37 342_638_197_292_754_979_757che restituisce il risultato che ti aspetti. HTH, ㎝ THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝ |
|
Scritto da claugo |
2020-08-02 12:51:27 - Re: Notazione Scientifica
|
Grazie.
Si in questo caso lo gestisce bene |
|
Scritto da RicPol |
2020-08-02 15:31:02 - Re: Notazione Scientifica
|
> in quanto python non li gestisce bene
Python, e tutti gli altri linguaggi di programmazione di cui sono a conoscenza. > In questo caso dovresti utilizzare l'operatore di divisione intera `//` Beh... no, non proprio. Se l'OP vuole una divisione esatta, ovvero con precisione arbitraria, deve usare il modulo decimal. Poi certo, in questo caso, siccome lui *sa già* che la divisione non dà resto, allora usando l'operatore di divisione intera ottiene il risultato che si aspetta. Ma in generale, non è il modo corretto (e inoltre, se uno sa già il risultato, allora perché chiederlo a Python...). L'OP dovrebbe probabilmente leggere qualcosa sull'aritmetica in virgola mobile, per esempio anche solo il tutorial di python... adesso anche nella versione tradotta, per comodità assoluta https://pytutorial-it.readthedocs.io/it/python3.8/floatingpoint.html https://pythoninwindows.blogspot.com/p/i-miei-libri.html : i miei libri
https://pythoninwindows.blogspot.com : il mio blog |
|
Scritto da claugo |
2020-08-02 16:40:49 - Re: Notazione Scientifica
|
Questo naturalmente è solo per verificare l'esattezza dei calcoli.
Io comunque sono interessato solo ai numeri interi e scarto quelli decimali. Il problema era vedere in notazione scientifica se il numero era intero o decimale e l'unico modo era dividerlo per un intero e rimoltiplicarlo per riavere lo stesso numero iniziale. Comunque si, con // sembra che il calcolo r=int(n//div), rimoltiplicandolo per lo stesso divisore, si ha una precisione maggiore e solo nel caso di un risultato decimale si avrà la conferma che il numero non può essere diviso per quel divisore. grazie a tutti |
Pagina: 1
Esegui il login per scrivere una risposta.