tutti noi conosciamo corto circuito nelle espressioni logiche, vale a dire quandoEsiste una moltiplicazione del cortocircuito?
if (False AND myFunc(a)) then
...
non si preoccupa di eseguire myFunc()
perché non c'è modo la condizione if
può essere vero.
ero curioso di vedere se c'è un equivalente per l'equazione algebrica di tutti i giorni, dicono
result = C*x/y + z
Se C=0
non v'è alcun punto nella valutazione del primo termine. Non sarebbe molto importante dal punto di vista delle prestazioni se x
e fossero scalari, ma se pretendiamo che siano matrici di grandi dimensioni e le operazioni siano costose (e applicabili alle matrici) allora sicuramente farebbe la differenza. Ovviamente si potrebbe evitare un caso così estremo lanciando una dichiarazione if C!=0
.
Quindi la mia domanda è se una tale funzione esiste e se è utile. Non sono un gran programmatore quindi probabilmente lo faccio sotto un nome che non ho incontrato; in tal caso, per favore, chiariscimi :)
logico corto circuito è un concetto importante da un punto di vista la funzionalità, mentre "l'aritmetica corto circuito" è semplicemente un'ottimizzazione a livello di compilatore senza differenze funzionali. La tua lingua preferita potrebbe già essere dietro le quinte senza che tu te ne accorga. – deceze
Qualcuno che ne sa più di me dovrebbe rispondere, ma immagino che si verifichino dei problemi se si interrompe la divisione. Cosa succederebbe, ad esempio, se y = 0? Se cortocircuitato, restituirebbe 0 quando la risposta è in realtà un errore. – Nate
@deceze Il cortocircuito aritmetico avrebbe effettivamente differenze funzionali oltre l'ottimizzazione, proprio come avviene nel caso del cortocircuito logico. Si consideri 'result = C * myfunction()'. Se 'C == 0', causando un cortocircuito dell'espressione aritmetica, allora' myfunction' non viene mai invocato e qualsiasi effetto collaterale che potrebbe avere non si verifica (come nel caso del cortocircuito logico). –