Dzielenie liczb ułamkowych z resztą

0

Jaki wynik reszty z dzielenia powinno dawać dzielenie liczby ułamkowej?
Na przykład:
1000.2 / 2
Wynik:

  1. 500 reszty 0.2
  2. 500.1 reszty 0

Albo:
1000.21 / 2
Wynik:

  1. 500 reszty 0.21
  2. 500.1 reszty 1
  3. 500.1 reszty 0.01

Który wynik jest najbardziej przydatny? (I ewentualnie zgodny z algorytmem dzielenia?)
Jakie podstawy matematyczne ma taki wynik?

0

Przydatny?

Na liczbach rzeczywistych dzielenie z resztą rzadko jest przydatne.
Ale da się podać przykłady: Dostaliśmy opakowania calowe (butelki 1 pinta), ile ich trzeba na metryczne X towaru - czujesz, ze trochę wydumane?

1

Jakie podstawy matematyczne ma taki wynik?

Żadne, dzielenie z resztą jest operacją na liczbach całkowitych.

1

JavaScript (tam każda liczba jest reprezentowana przez double):

500.1 % 2.0
0.10000000000002274

Powyższa operacja to zmiennoprzecinkowe dzielenie modulo, dokumentowane przez standard IEEE 754.

W Javie i C# operacja ta widnieje pod nazwą IEEEremainder na obiektach Match: https://docs.microsoft.com/en-us/dotnet/api/system.math.ieeeremainder?view=netcore-3.1

W większości języków progamowania dzielenie gdzie jeden z argumentów jest liczbą zmiennoprzecinkową jest traktowane jako operacja zmiennoprzecinkowa.

Inna spraw to dzielenie modulo liczb całkowitych gdzie jedne z argumentów jest liczbą ujemną - tutaj różne języki przyjmują różne konwencje.

1
0xmarcin napisał(a):

W Javie i C# operacja ta widnieje pod nazwą IEEEremainder na obiektach Match: https://docs.microsoft.com/en-us/dotnet/api/system.math.ieeeremainder?view=netcore-3.1

W Remarks jest napisane, że IEEERemainder nie jest tym samym, co operator modulo. I to dodaje kolejną wątpliwość, jak obliczać.
Ale w przykładach jest wypisane porównanie wyniku IEEERemainder z operatorem modulo. I tam widać, że wynikiem jest reszta z dzielenia przez całą liczbę zmiennoprzecinkową. Dla C#.
Sprawdziłem w Javascript i wynik jest taki sam (pomijając przybliżenie reprezentacji ułamka).
Natomiast w programie bc (linuksowym) jeśli ustawi się scale na jakąś wartość większą od 0, to okazuje się, że dzieli dalej aż do tej dokładności i wynikiem jest np.

scale=10
17.8 % 4.1
.00000000014

To powyższe wydaje się chyba błędnym zastosowaniem algorytmu modulo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1