2015-01-23 5 views
6

Diciamo che ho una variabile doubled. C'è un modo per ottenere il valore successivo o precedente supportato dall'architettura della CPU.Come ottenere il minimo doppio successivo o precedente possibile supportato dall'architettura?

Come esempio banale, se il valore era 10.1245125 e la precisione dell'architettura era fissata a 7 posizioni decimali, il valore successivo sarebbe 10.1245126 e il valore precedente sarebbe 10.1245124.

Ovviamente su architetture a virgola mobile non è così semplice. Come potrei essere in grado di raggiungere questo (in Java)?

risposta

11

In realtà, un'architettura a virgola mobile IEEE 754 lo rende semplice: grazie allo standard, la funzione è chiamata nextafter in quasi tutte le lingue che la supportano e questa uniformità mi ha permesso di scrivere una risposta alla tua domanda con pochissimo familiarità con Java:

Il numero java.lang.Math.nextAfter(double start, double direction) restituisce il numero in virgola mobile adiacente al primo argomento nella direzione del secondo argomento.

Ricordare che -infinità e + infinito sono valori a virgola mobile, e questi valori sono convenienti per dare la direzione (secondo argomento). Non commettere l'errore comune di scrivere qualcosa come Math.nextAfter(x, x+1), che funziona solo fino a 1 è maggiore dello ULP di x.

Chiunque scriva quanto sopra probabilmente significa invece Math.nextAfter(x, Double.POSITIVE_INFINITY), che salva un'aggiunta e funziona per tutti i valori di x.

+0

Oh, ho perso quella funzione! Grazie mille! – jbx

Problemi correlati