21
Generale / Re:Divisione per interi ... una giungla
« Ultimo post da DragoRosso il Maggio 23, 2024, 03:41:51 pm »L'operazione che fà Python è corretta dal suo punto di vista, lo afferma la definizione dell'operatore "//" ma secondo me illogica anche se dal punto di vista prettamente matematico sembra che ci siano delle prevalenze verso il Python.
Dal punto di vista informatico invece sembra che ci sia preponderanza verso il calcolo Pascal, per cui di fatto una divisione intera ha come risultato una divisione troncata con segno (o come meglio si definisce arrotondata allo ZERO).
Python invece arrotonda con "floor" o "ceil" in funzione al "segno" del risultato (appunto all'intero minore, dove il limite non è lo ZERO ma sono bensì il + / - INFINITO). Quindi il minore è il valore verso il - INFINITO e il maggiore è il valore verso il + INFINITO.
Tendenzialmente l'informatico il valore "minore" in termini di arrotondamento lo intende come valore verso lo ZERO.
Per intenderci, un risultato in Python di questa divisione (e i matematici sembrano prevalere per questo ?)sarebbe è:
(-9 // 5) = -2 (9 // -5) = -2 (-9 // -5) = 1 (9 // 5) = 1
(-9 % 5) = 1 (9 % -5) = -1 (-9 % -5) = -4 (9 % 5) = 4
in Pascal (e gli informatici sono più concordi su ciò):
(-9 div 5) = -1 (9 div -5) = -1 (-9 div -5) = 1 (9 div 5) = 1
(-9 mod 5) = -4 (9 mod -5) = 4 (-9 mod -5) = -4 (9 mod 5) = 4
Entrambi dal punto di vista pratico danno un risultato equivalente, ma potete capire che la rappresentazione non è proprio così equivalente. A me sembrano più coerenti i risultati Pascal, però sicuramente i matematici hanno le loro ragioni.
Comunque per rispondere a @BonMario, il campo di applicazione da dove ciò è comparso e l'applicazione di analisi spettrografica, dove la rappresentazione era legata ad alcuni algoritmi che a me (in Pascal) davano i risultati aspettati mentre in Python no.
E sinceramente mi ci è voluto un pò per riuscire a fare quadrato, perchè mentre in Pascal è tutto come ti aspetti (quando cambiano i segni degli operandi cambiano i segni dei risultati ma i valori "assoluti" sono sempre gli stessi, in Python non è così).
E' come un pò dire che (3 * 5) = (10+5) oppure (3 * 5) = (20 - 5), entrambi sono corretti però dal punto di vista logico il primo mi appare un pò più ... come si può dire ... logico ...
Dal punto di vista informatico invece sembra che ci sia preponderanza verso il calcolo Pascal, per cui di fatto una divisione intera ha come risultato una divisione troncata con segno (o come meglio si definisce arrotondata allo ZERO).
Python invece arrotonda con "floor" o "ceil" in funzione al "segno" del risultato (appunto all'intero minore, dove il limite non è lo ZERO ma sono bensì il + / - INFINITO). Quindi il minore è il valore verso il - INFINITO e il maggiore è il valore verso il + INFINITO.
Tendenzialmente l'informatico il valore "minore" in termini di arrotondamento lo intende come valore verso lo ZERO.
Per intenderci, un risultato in Python di questa divisione (e i matematici sembrano prevalere per questo ?)
(-9 // 5) = -2 (9 // -5) = -2 (-9 // -5) = 1 (9 // 5) = 1
(-9 % 5) = 1 (9 % -5) = -1 (-9 % -5) = -4 (9 % 5) = 4
in Pascal (e gli informatici sono più concordi su ciò):
(-9 div 5) = -1 (9 div -5) = -1 (-9 div -5) = 1 (9 div 5) = 1
(-9 mod 5) = -4 (9 mod -5) = 4 (-9 mod -5) = -4 (9 mod 5) = 4
Entrambi dal punto di vista pratico danno un risultato equivalente, ma potete capire che la rappresentazione non è proprio così equivalente. A me sembrano più coerenti i risultati Pascal, però sicuramente i matematici hanno le loro ragioni.
Comunque per rispondere a @BonMario, il campo di applicazione da dove ciò è comparso e l'applicazione di analisi spettrografica, dove la rappresentazione era legata ad alcuni algoritmi che a me (in Pascal) davano i risultati aspettati mentre in Python no.
E sinceramente mi ci è voluto un pò per riuscire a fare quadrato, perchè mentre in Pascal è tutto come ti aspetti (quando cambiano i segni degli operandi cambiano i segni dei risultati ma i valori "assoluti" sono sempre gli stessi, in Python non è così).
E' come un pò dire che (3 * 5) = (10+5) oppure (3 * 5) = (20 - 5), entrambi sono corretti però dal punto di vista logico il primo mi appare un pò più ... come si può dire ... logico ...