Confusing problem about duration data

Hi,
I'm having a very confusing issue when I'm operating with duration data. I'm new to this data type. Here I debugged my code and simplify my question as an example. Please can someone point out the root reason of why this is not working. Basically, I first define a duration x and with this x, I want to create a new x1 with a random duration, like in the example. I describe my confusion as below. Can anyone help me out? I know it might be the problem of using rand but why?
x = duration(8,0,47);
>> x1 = x + rand*duration(0,0,10);
>> x1
x1 =
duration
08:00:54
However, I realize though x1 is of type of duration, it does not equal to the duration 08:00:54.
>> x1 == duration(8,0,54)
ans =
logical
0
Nevertheless, if I define a new x2 in a similar way, it works.
>> x2 = x + duration(0,0,7);
>> x2
x2 =
duration
08:00:54
>> x2 == duration(8,0,54)
ans =
logical
1
And x1 apparently doesn't equal to x2.
>> x1 == x2
ans =
logical
0

 Respuesta aceptada

Walter Roberson
Walter Roberson el 12 de Abr. de 2019
rand() produces a 53 bit random number in the range 0 to 1, effectively randi([1 2^53-1],1,1) / 2^53
When you multiply this by 10 seconds, it is very unlikely to happen to result in an exact multiple of 1 second.
This is not obvious because the default output for duration does not display fractions of a second.
x1.Format = 'hh:mm:ss.SSSSSSSSS';

3 comentarios

QIAO WANG
QIAO WANG el 16 de Abr. de 2019
That's great explanation. Thank you so much! The reason why I used rand was I wantted to generate random duration. Like what I showed in the question, I want a new variable of duration type that is based on an existing duration plus a random interval. What should I use? Do you have any suggestion?
That is what you are getting now. A random duration of 7.846832 seconds is still a random duration within 10 seconds. The default format for duration just was not showing the fraction.
Perhaps
x + seconds(randi(10))
Note that randi(10) will not produce 0 but will produce 10.
QIAO WANG
QIAO WANG el 16 de Abr. de 2019
Thank you very much! All sorted now!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Productos

Versión

R2018a

Etiquetas

Aún no se han introducido etiquetas.

Preguntada:

el 12 de Abr. de 2019

Comentada:

el 16 de Abr. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by