Wpis z mikrobloga

#programowanie #naukaprogramowania #csharp #gamedev

Mirki jak radzicie sobie z tryliardami? ( ͡° ͜ʖ ͡°)
Mam zmienną w grze, która będzie prędzej lub później przyjmowała ogromne wartości. Chcę zapisywać ją w postaci floata od 1-1000 + sufiks mnożnika, np 17 tysięcy -> 17K, 24 miliardy -> 24B itd. Jak mogę zrobić coś takiego?

I jeszcze - double w C# naprawdę ma taki zasięg jak piszą na msdn? ±5.0 × 10^−324 to ±1.7 × 10^308? Jeśli tak to mógłbym to wszystko zapisywać w jednej zmiennej, 308 zer nie przekroczę.
  • 16
@blackphoenix: w grach tak się zdarza. W Metin2 była taka inflacja "pieniędzy" (jak boty zaczęły zarabiać na siebie), że licznik się przekręcał.

I wtedy zrobili aktualizację z K, M, G, tak jak pisze @qweasdqweasd.

Jeśli wystarczy ci dokładność i zakres double, to weź. Jak chcesz dokładniej to BigInteger, tak jak pisze @Myrten, ale w nich troszkę mniej wygodnie robi się obliczenia (a przynajmniej tak jest w Javie).
@Optimum: use BigInteger Luke ;-)

p.s. double ma wielki zasięg ale jest niedokładny i nawet legendarny John Skeet się pierdyknął w swojej klasie do wydobywania wartości z double, więc jak dla mnie jedyny realny wybór do BigInteger ( ͡° ͜ʖ ͡°)
@Optimum: A sprawdź sobie sam.
Przykład, to ProjectEuler 20: https://projecteuler.net/problem=20

Rozwiązanie (moje) masz tutaj: https://github.com/zchpit/ProjectEuler/blob/master/C%23/ProjectEulerInC%23/ProjectEulerInC%23/Problem20.cs
Klasa stworzona przez Johna Skeeta jest tutaj: https://github.com/zchpit/ProjectEuler/blob/master/C%23/ProjectEulerInC%23/ProjectEulerInC%23/DoubleConverter.cs

Poprawne rozwiązanie, zgodnie z projektem Euler działa z BigInteger. Jak zamiast tego, użyjesz double + DoubleConverter to otrzymasz błędny wynik. A o ile? To już sam sobie sprawdź.

Linki: http://www.mathblog.dk/project-euler-20-sum-digits/