View Full Version : Compilatori ed espressioni
Algobardo
18-10-2008, 19:31
Benvenuti,
la domanda che vorrei porre è:
I compilatori operano manipolazioni sulle espressioni ?
Mi spiego meglio
A/X + B/X^2
verrà compilato con prima le due divisioni e poi l'addizione o il compilatore può trasformarlo in
(A + B/X)/X ad esempio ?
La domanda nasce da una questione sollevata in un altro thread e che ho voluto riproporre qua.
wingman87
18-10-2008, 19:40
Il tuo esempio è sbagliato, dovrebbe essere (A + B/X)/X.
Riguardo alla domanda mi verrebbe da risponderti che è più oneroso fare raccoglimenti vari che calcolare direttamente le espressioni come sono scritte ma siccome non sono sicuro di come funzioni effettivamente aspettiamo che risponda qualcun altro di più esperto
Algobardo
18-10-2008, 19:46
Il tuo esempio è sbagliato, dovrebbe essere (A + B/X)/X.
Riguardo alla domanda mi verrebbe da risponderti che è più oneroso fare raccoglimenti vari che calcolare direttamente le espressioni come sono scritte ma siccome non sono sicuro di come funzioni effettivamente aspettiamo che risponda qualcun altro di più esperto
si, scusa, mi era saltato un diviso.
comunque il ragionamento include ovviamente una qualunque manipolazione che modifichi la struttura dell'espressione.
DanieleC88
18-10-2008, 20:00
Se si tratta di valori noti a "compile time" sì, altrimenti il compilatore deve generare una catena di istruzioni che riproducano quel comportamento.
L'espressione presa così è un po' difficile che venga ottimizzata (anch perché per elevare a potenza spesso si usa una funzione di libreria), ma un'espressione di questo tipo:
A/X + B/(X*X)
non è tanto impossibile che venga ottimizzata.
DanieleC88
19-10-2008, 13:23
Infatti ho provato ad ottimizzare il codice postato nell'altro thread con -O3 su GCC e mi sembra di capire che precalcola anche l'intero valore dell'espressione (perché x è una variabile, ma è nota a compile time). :D
cdimauro
19-10-2008, 14:54
Benvenuti,
la domanda che vorrei porre è:
I compilatori operano manipolazioni sulle espressioni ?
Mi spiego meglio
A/X + B/X^2
verrà compilato con prima le due divisioni e poi l'addizione o il compilatore può trasformarlo in
(A + B/X)/X ad esempio ?
La domanda nasce da una questione sollevata in un altro thread e che ho voluto riproporre qua.
Dipende in primis dalla libertà che il linguaggio concede nella valutazione delle espressioni (e il C lo è sicuramente).
In secondo luogo dalla "bontà" del compilatore (anche se mi pare difficile che riesca ad arrivare a simili livelli di ottimizzazione del codice).
rеpne scasb
19-10-2008, 21:25
■
cdimauro
19-10-2008, 21:36
Ciò non toglie che sulla carta hanno la libertà di farlo.
Infatti anche il K & R, trattando l'argomento, suggerisce che se si vuole avere la certezza della valutazione di certe espressioni si deve far ricorso a variabili temporanee "di appoggio".
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.