2010-11-13 23 views
14

All'ora 0:43:15 in questo Tech-Talk about D, viene discussa l'implementazione della funzione min. Le preoccupazioni in merito a "stabilità" e "extra shuffling (se i valori sono uguali)" quando vengono utilizzate in alcuni algoritmi sono proposte come una delle ragioni per l'implementazione mostrata.Implementazione corretta del min

Qualcuno può fornire un caso d'uso reale/pratico (o fornire una spiegazione più dettagliata) dove questa specifica implementazione di min è "stabile" (meglio conosciuta) rispetto alla sua altra possibile implementazione? O è solo un altro esempio di alpha-geek che vanno un po 'troppo lontano?

implementazione consigliato:

template <class LHS, class RHS, class Return> 
inline Return min(LHS& lhs, RHS& rhs) 
{ 
    return (rhs < lhs) ? rhs : lhs; 
} 

Altro possibile implementazione:

template <class LHS, class RHS, class Return> 
inline Return min(LHS& lhs, RHS& rhs) 
{ 
    return (lhs < rhs) ? lhs: rhs; 
} 

Proposta N2199 fornisce implementazioni che si basano su quest'ultima, si ricorda che la proposta non ha avuto successo in questo momento.

Altre proposte importanti riguardo al min/max sono N1840, N2485 e N2551

+6

Non capisco. Non vedo alcun vantaggio per una delle implementazioni che mostri. Ad un certo punto, uno di essi deve essere scelto ... –

+1

Trovo molto divertente come una questione di attenzione molto ristretta e applicabilità limitata sia valutata estremamente bene quando una domanda di massima attenzione e applicabile a quasi tutti viene chiamata "off". argomento'. So che nei dettagli della programmazione può essere estremamente importante. Ma questo è molto strettamente importante e non dovrei mai dipendere dalla stabilità del min per essere corretto nel codice che ho scritto comunque perché è un dettaglio troppo piccolo per dipendere da chi ha ragione. – Omnifarious

+5

@Omnifarious: Penso che tu abbia frainteso il problema, non si tratta di qualcosa di banale, ma piuttosto di un problema che ha perseguitato il C++ per gli ultimi 10 anni, ma a ulteriore scopo, uno degli esperti mondiali nella lingua e alcune persone a un'organizzazione un po 'prestigiosa come Google, ha fatto un commento, e ha fatto sembrare tutto normale e "di fatto" quando la maggior parte del settore acconsentirebbe al contrario, che non si può fare a meno di chiedersi se questo è un altro Kepler o La situazione di Galileo di chiamare il mondo intorno ... molto probabilmente è tutta una sciocchezza, ma perché non discuterne? –

risposta

35

In questo caso, sono abbastanza sicuro "stabile" si riferisce alle stabile come è applicato in di smistamento - vale a dire, che quando/se due elementi sono uguali, rimangono ordinati nello stesso ordine in cui erano destinati all'inizio. Per fare ciò, si desidera restituire lhs quando è inferiore o uguale a rhs - ma in C++ si (normalmente) si desidera farlo utilizzando solo operator<, senza dipendere dal operator<=.

-3

In generale, non vi è alcun vantaggio per un'implementazione rispetto all'altra. Se si sta implementando min per un utilizzo specifico, potrebbe essere opportuno scegliere uno dei moduli in base ai dati a cui verrà applicato per sfruttare al massimo le previsioni di ramo.

Se per la maggior parte dei casi di utilizzo il minimo previsto è rhs, scegliere la prima implementazione. Se è lhs, scegliere la seconda implementazione.

+0

La previsione del ramo può predire i falsi solo in modo utile come i trues. – Puppy

Problemi correlati