Optimum
#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ę.
1
  • Najlepsze
  • Wszystkie komentarze
fnord23
@Optimum: Kombinujesz jak koń pod górę.

double w C# naprawdę ma taki zasięg jak piszą na msdn?

Nie, kłamią.
16
M.....n
M.....n
1
Optimum
@fnord23: Dlaczego? Co jest przekombinowane?
1
blackphoenix
@Optimum: nie masz czegos przekombinowanego? Na pewno potrzebujesz tak dużych liczb?
1
Z.....o
Z.....o
@blackphoenix: Może robić równie dobrze grę w stylu jakiegoś clickera, tam to zawsze się duże liczby przydają.
1
p.....i
p.....i
@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:
1
q.....d
q.....d
@Optimum: możesz sobie zrobić jakąś strukturę liczba + enum, gdzie enum to będzie K,M,G, itp.
0
M.....n
M.....n
@Optimum: Ma taki zasięg tylko jak to z doublami to zawsze są one niedokładne ( ͡° ʖ̯ ͡°)
0
Optimum
@nvll: Czyli jakiś sukces? ( ͡° ͜ʖ ͡°)
0
fnord23
@Optimum:

Chcę zapisywać ją w postaci floata od 1-1000 + sufiks mnożnika
0
Optimum
@fnord23: Więc jak byś to zrobił? Zapis np biliona normalnie, w 13 cyfrach, jest trudny do odczytywania
0
fnord23
@Optimum: trzymałbym liczbę normalnie w double i tylko wyświetlał tak jak napisałeś
0
mk321
@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
0
p.....i
p.....i
@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 ( ͡° ͜ʖ ͡°)
0
Optimum
@piot-rabi: A bardzo on niedokładny? Robię właśnie clickera, używam tylko dwóch miejsc po przecinku i jakieś drobne nieścisłości nie wpłyną na rozgrywkę :)
0