Mam wartość double
o wartości d
i chciałbym ją nieco nieznacznie zwiększyć (lub zmniejszyć), aby uzyskać nową wartość, która będzie jak najbliżej oryginału, ale wciąż będzie większa niż (lub mniejsza niż) oryginalna .Jak zmienić wartość zmiennoprzecinkową o najmniejszy przyrost w Javie?
Nie musi być zbliżony do ostatniego bitu - ważniejsze jest to, że każda zmiana, którą wprowadzę, zapewni inną wartość, a nie zaokrąglenie do oryginału.
(This question has been asked and answered for C, C++)
Powodem muszę to to, że jestem od Double do mapowania (coś), a może mam kilka pozycji z podwójnym ocalić „value”, ale wszystkie one muszą iść indywidualnie do Mapa.
Mój obecny kod (który spełnia swoje zadanie) wygląda następująco:
private void putUniqueScoreIntoMap(TreeMap map, Double score,
A entry) {
int exponent = 15;
while (map.containsKey(score)) {
Double newScore = score;
while (newScore.equals(score) && exponent != 0) {
newScore = score + (1.0d/(10 * exponent));
exponent--;
}
if (exponent == 0) {
throw new IllegalArgumentException("Failed to find unique new double value");
}
score = newScore;
}
map.put(score, entry);
}
Dlaczego używasz podwójnego typu do swoich potrzeb? Długie "modifyId" byłoby znacznie łatwiejsze do wdrożenia. –
To jest dość hacky. Dlaczego nie skorzystać z mapy list? –
Co powiedział @Joeri. Jeśli potrzebujesz wielu wartości dla klucza na mapie, zamiast tego zapisz listę wartości dla każdego klucza. –