mod function return wrong answer?

How can I make sure mod(a,b) returns value less than b, without explicitly calling min( mod(a,b), b )?
mod( -eps, 1 ) = 1 when eps ~ 10^-17.
Numerical accuracy is not an issue, but I need mod( a, 1 ) be less than 1.

3 commentaires

What value would you like it to take?
mod(a,m) is expressed as:
b = a - m.*floor(a./m);
so, you have b = -eps - (1)*floor(-eps) = -eps - (-1) = 1
rem(-eps,1) will return -eps
madhan ravi
madhan ravi le 5 Juil 2020
Modifié(e) : madhan ravi le 5 Juil 2020
Sindar I suggest moving your comment as an answer
Hiroaki Yamamoto
Hiroaki Yamamoto le 5 Juil 2020
I expected mod( a, m ) < m (less than m),
but numerically mod(a, m) <= m (less than or equal to m) is the result when a = -1e-17 and m = 1.
If, internally, 1 - 10^-17 = 1 is calculated and returned, I think 0 is the mathematically correct return value rather than 1.

Connectez-vous pour commenter.

Réponses (1)

madhan ravi
madhan ravi le 5 Juil 2020

0 votes

>> mod( -eps, 1 ) < 1
ans =
logical
1

4 commentaires

Hiroaki Yamamoto
Hiroaki Yamamoto le 5 Juil 2020
I get different answers as follows, which indicare mod(a, m) can be equal to m, not less than m.
>> mod(-1e-17,1) < 1
ans =
logical
0
>> mod(-1e-17,1) == 1
ans =
logical
1
madhan ravi
madhan ravi le 5 Juil 2020
Modifié(e) : madhan ravi le 5 Juil 2020
>> sprintf('%.32f', mod(-1e-17, 1))
ans =
'1.00000000000000000000000000000000'
>> sprintf('%.32f', mod(-eps, 1))
ans =
'0.99999999999999977795539507496869'
Hiroaki Yamamoto
Hiroaki Yamamoto le 5 Juil 2020
My question is, mathematically which of the following is correct or intended to be implemented.
1) mod(a, m) < m
or
2) mod(a, m) <= m.
Practically, I found mod(a,m) = m can happen and I do explicit check and avoid problems caused by the case mod(a,m) = m.
madhan ravi
madhan ravi le 5 Juil 2020
Practically speaking it depends on what m is.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Argument Definitions dans Centre d'aide et File Exchange

Produits

Version

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by