time()

Discussion in 'C Programming' started by Bill Cunningham, Apr 27, 2008.

  1. I have no idea what to do with time () or another function to change the
    time_t data type to int to get numbers say from 0-20 that are ints. time()
    reports a huge number of seconds and when using rand() truely produce a fake
    randomness. I want smaller numbers. We have functions like strtod and strtol
    to change chars into doubles or longs why not change time_t to int?

    Bill
     
    Bill Cunningham, Apr 27, 2008
    #1
    1. Advertising

  2. Bill Cunningham

    Thad Smith Guest

    Bill Cunningham wrote:
    > I have no idea what to do with time () or another function to change the
    > time_t data type to int to get numbers say from 0-20 that are ints.


    What units do you want? gmtime() will convert time_t into struct tm
    fields. Standard C doesn't define the encoding of time_t values.

    > time()
    > reports a huge number of seconds


    maybe

    > and when using rand() truely produce a fake
    > randomness.


    A pseudo random numbergenerator does not generate true random values.

    I want smaller numbers.

    Take 0 -- it's a small number. If that isn't sufficient, define your
    requirements more precisely.

    We have functions like strtod and strtol
    > to change chars into doubles or longs why not change time_t to int?


    gmtime() and localtime() do that.

    --
    Thad
     
    Thad Smith, Apr 27, 2008
    #2
    1. Advertising

  3. "Bill Cunningham" <> writes:
    > I have no idea what to do with time () or another function to change the
    > time_t data type to int to get numbers say from 0-20 that are ints.


    What for? If you want numbers in the range 0-20, what does that have
    to do with time()?

    > time()
    > reports a huge number of seconds and when using rand() truely produce a fake
    > randomness.


    I don't know what you mean by that. You're using time() and rand()
    together somehow? How exactly? Presumably srand() is involved
    somehow, but you didn't mention it.

    > I want smaller numbers. We have functions like strtod and strtol
    > to change chars into doubles or longs why not change time_t to int?


    time_t is an arithmetic type capable of representing times. That's
    *all* the standard tells you about it. You can convert a time_t value
    to int the same way you'd convert any numeric type to another one
    (just assign it), but that's not a useful thing to do; for one thing,
    the result of time() may or may not fit within the range of int.

    Let's back off a bit. You're trying to accomplish something, but you
    haven't actually told us exactly what it is. Instead, you've thrown
    together a few things that you might *use* to accomplish something
    (time(), type time_t, type int, numbers in the range 0-20, rand(),
    "smaller numbers") -- things that apparently aren't doing what you
    want them to do.

    It's like asking "Should I use a hammer or a screwdriver? What about
    a staple gun?" without saying what you're trying to build.

    First, tell us *exactly* what you want to accomplish. State your
    problem without referring to any possible solution or piece of a
    solution.

    Then, *separately*, you might ask whether some proposed solution, or
    something like it, will do what you want. If you can express the
    proposed solution in C code, even if it doesn't work or is incorrect,
    that's great. But we can't help without knowing what you're trying to
    do.

    Have you read <http://www.catb.org/~esr/faqs/smart-questions.html>?

    You might also take a look at section 13 in the comp.lang.c FAQ,
    particularly the questions on random numbers.

    --
    Keith Thompson (The_Other_Keith) <>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 27, 2008
    #3
  4. [snip]

    > We have functions like strtod and strtol
    >> to change chars into doubles or longs why not change time_t to int?

    >
    > gmtime() and localtime() do that.
    >

    OK Thad I'll try that. THanks.

    Bill
     
    Bill Cunningham, Apr 27, 2008
    #4
  5. [snip]

    > Let's back off a bit. You're trying to accomplish something, but you
    > haven't actually told us exactly what it is. Instead, you've thrown
    > together a few things that you might *use* to accomplish something
    > (time(), type time_t, type int, numbers in the range 0-20, rand(),
    > "smaller numbers") -- things that apparently aren't doing what you
    > want them to do.
    >
    > It's like asking "Should I use a hammer or a screwdriver? What about
    > a staple gun?" without saying what you're trying to build.
    >
    > First, tell us *exactly* what you want to accomplish. State your
    > problem without referring to any possible solution or piece of a
    > solution.
    >
    > Then, *separately*, you might ask whether some proposed solution, or
    > something like it, will do what you want. If you can express the
    > proposed solution in C code, even if it doesn't work or is incorrect,
    > that's great. But we can't help without knowing what you're trying to
    > do.


    Say you have two dice of six sides. Can you use rand() to create 12
    options by rolling the die. Now there's another way you can do this simply
    but using arrays but I do not know how. Something like this.

    int a [12];

    Ok there's 12 objects or

    int a [20];

    like I want. I can use for to loop over them but I can't get randomness.
    That's a feature I do not know how to reproduce. It will have to someway
    depend on the system and most use the system time.

    Bill
     
    Bill Cunningham, Apr 27, 2008
    #5
  6. [snip]

    > Note that if you use pseudo-random numbers to implement casino games
    > and let the public play these games, betting REAL money, you're going
    > to lose your shirt.
    >
    > Something like rand() % 21 will generate numbers from 0 .. 20, inclusive,
    > but the distribution will not be exactly even since 21 does not divide
    > RAND_MAX+1 evenly.
    >
    > Seeding rand() is often done with the system time, like:
    >
    > srand((unsigned) time() );


    I want to create a utility for playing online game like RPGs. So I was
    wanting to write a "dice rolling" utility. That's exactly what I am wanting.

    Bill
     
    Bill Cunningham, Apr 27, 2008
    #6
  7. "Bill Cunningham" <> writes:
    > [snip]
    >
    >> Let's back off a bit. You're trying to accomplish something, but you
    >> haven't actually told us exactly what it is. Instead, you've thrown
    >> together a few things that you might *use* to accomplish something
    >> (time(), type time_t, type int, numbers in the range 0-20, rand(),
    >> "smaller numbers") -- things that apparently aren't doing what you
    >> want them to do.
    >>
    >> It's like asking "Should I use a hammer or a screwdriver? What about
    >> a staple gun?" without saying what you're trying to build.
    >>
    >> First, tell us *exactly* what you want to accomplish. State your
    >> problem without referring to any possible solution or piece of a
    >> solution.
    >>
    >> Then, *separately*, you might ask whether some proposed solution, or
    >> something like it, will do what you want. If you can express the
    >> proposed solution in C code, even if it doesn't work or is incorrect,
    >> that's great. But we can't help without knowing what you're trying to
    >> do.


    I wrote the above. When you posted your followup, your newsreader
    should have provided an attribution line, something like

    Keith Thompson <> writes:

    Please leave that line in place. Quoting somebody without attribution
    is considered rude. (I think I've told you this before.)

    > Say you have two dice of six sides. Can you use rand() to create 12
    > options by rolling the die. Now there's another way you can do this simply
    > but using arrays but I do not know how. Something like this.
    >
    > int a [12];
    >
    > Ok there's 12 objects or
    >
    > int a [20];
    >
    > like I want. I can use for to loop over them but I can't get randomness.
    > That's a feature I do not know how to reproduce. It will have to someway
    > depend on the system and most use the system time.


    You're still not making sense.

    If I roll two six-sided dice, there are 36 (6*6) possible outcomes,
    not 12. I suppose you could divide these up into 12 sets of 3
    outcomes each, but I suspect that's not what you had in mind.

    You stated your problem extremely vaguely, and mixed it with a
    mishmash of possible pieces of a solution (rand(), a 12-element or
    20-element array, a for loop, the system time). That's exactly what I
    asked you not to do.

    Please start by stating the problem you're trying to solve *without*
    reference to the method used to solve it. Don't talk about rand(), or
    time_t, or time(). Tell us what result you're trying to achieve. You
    should be able to do that in one sentence or one short paragraph.

    An example:

    I want to generate a sequence of 73 uniformly distributed random
    numbers, each in the range 37 to 153. I want the sequence to be
    different each time I run my program.

    (I've deliberately written something that differs from what you seem
    to be looking for. You need to tell us what you want.)

    Once you've done that, and *only* after you've done that, you can ask
    whether certain tools (rand(), time(), a for loop) might or might not
    be part of a solution.

    --
    Keith Thompson (The_Other_Keith) <>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 27, 2008
    #7
  8. (Gordon Burditt) writes:
    [...]
    > time_t *is* an integer type, although it need not represent a "number
    > of <time unit> since <epoch>". It might not fit in an int.


    time_t is an integer type on most implementations. The standard only
    guarantees that it's an arithmetic type capable of representing times.
    It could be floating-point. (It could even, in a sufficiently
    perverse implementation, be complex or imaginary.)

    (I do not give permission to quote this article, or any other article
    I post to Usenet, without attribution.)

    --
    Keith Thompson (The_Other_Keith) <>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 27, 2008
    #8
  9. "Keith Thompson" <> wrote in message
    news:...

    > I wrote the above. When you posted your followup, your newsreader
    > should have provided an attribution line, something like
    >
    > Keith Thompson <> writes:
    >
    > Please leave that line in place. Quoting somebody without attribution
    > is considered rude. (I think I've told you this before.)


    Now is this how it should be. I'm using outlook express :( It took me
    awhile way way back to learn not to top post. Sorry I will work on this. I
    have to do it all manually.

    Bill
     
    Bill Cunningham, Apr 27, 2008
    #9
  10. "Keith Thompson" <> wrote in message
    news:...

    > (I do not give permission to quote this article, or any other article
    > I post to Usenet, without attribution.)
    >

    What do you mean by this Keith? Do you not want to be quoted in clc's
    message threads?

    Bill
     
    Bill Cunningham, Apr 27, 2008
    #10
  11. Bill Cunningham

    Bartc Guest

    "Keith Thompson" <> wrote in message
    news:...
    > "Bill Cunningham" <> writes:
    >> [snip]
    >> Say you have two dice of six sides. Can you use rand() to create 12
    >> options by rolling the die. Now there's another way you can do this
    >> simply
    >> but using arrays but I do not know how. Something like this.
    >>
    >> int a [12];
    >>
    >> Ok there's 12 objects or
    >>
    >> int a [20];
    >>
    >> like I want. I can use for to loop over them but I can't get randomness.
    >> That's a feature I do not know how to reproduce. It will have to someway
    >> depend on the system and most use the system time.

    >
    > You're still not making sense.
    >
    > If I roll two six-sided dice, there are 36 (6*6) possible outcomes,
    > not 12. I suppose you could divide these up into 12 sets of 3
    > outcomes each, but I suspect that's not what you had in mind.


    I make it only 11 outcomes (1+1 to 6+6). Although if you listed all
    combinations there would be 36.

    If certain combinations are important, then you can list the 6 outcomes for
    each die separately, totalling 12 outcomes.

    --
    Bartc
     
    Bartc, Apr 28, 2008
    #11
  12. "pete" <> wrote in message
    news:...
    >
    > /* BEGIN dice.c */
    >
    > #include <stdio.h>
    > #include <stdlib.h>
    >
    > #define THROWS 1000
    > #define str(s) # s
    > #define xstr(s) str(s)
    >
    > int main(void)
    > {
    > int sum[13] = {0};
    > unsigned count = THROWS;
    >
    > while (count-- != 0) {
    > ++sum[rand() % 6 + 1 + rand() % 6 + 1];
    > }
    > puts("Dice totals from "xstr(THROWS)" throws of a pair of dice:");
    > puts("value count");
    > for (count = 0; count != sizeof sum / sizeof *sum; ++count) {
    > printf("%2u %2d\n", count, sum[count]);
    > }
    > return 0;
    > }
    >
    > /* END dice.c */
    >


    Thanks Pete but I can't read some of the program. What does int sum
    [13]={0}; mean? Why is there a zero in parenthesis? Also
    #define str(s) # s
    > #define xstr(s) str(s)


    What does that code do?

    The rest I can pretty much make out. But what does the % after rand mean?

    This is how to learn C.

    Bill
     
    Bill Cunningham, Apr 28, 2008
    #12
  13. "Bill Cunningham" <> writes:
    > "Keith Thompson" <> wrote in message
    > news:...
    >> (I do not give permission to quote this article, or any other article
    >> I post to Usenet, without attribution.)
    >>

    > What do you mean by this Keith? Do you not want to be quoted in clc's
    > message threads?


    No, I do not want to be quoted *without attribution*.

    Gordon Burditt deliberately deletes attribution lines from quoted
    material when he posts followups. The above was directed primarily at
    him. He's welcome to quote me (as is anyone else), but not without
    giving me credit for my words.

    --
    Keith Thompson (The_Other_Keith) <>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 28, 2008
    #13
  14. Bill Cunningham

    Lew Pitcher Guest

    In comp.lang.c, Bill Cunningham wrote:

    >
    > "pete" <> wrote in message
    > news:...
    >>
    >> /* BEGIN dice.c */
    >>
    >> #include <stdio.h>
    >> #include <stdlib.h>
    >>
    >> #define THROWS 1000
    >> #define str(s) # s
    >> #define xstr(s) str(s)
    >>
    >> int main(void)
    >> {
    >> int sum[13] = {0};
    >> unsigned count = THROWS;
    >>
    >> while (count-- != 0) {
    >> ++sum[rand() % 6 + 1 + rand() % 6 + 1];
    >> }
    >> puts("Dice totals from "xstr(THROWS)" throws of a pair of dice:");
    >> puts("value count");
    >> for (count = 0; count != sizeof sum / sizeof *sum; ++count) {
    >> printf("%2u %2d\n", count, sum[count]);
    >> }
    >> return 0;
    >> }
    >>
    >> /* END dice.c */
    >>

    >
    > Thanks Pete but I can't read some of the program. What does int sum
    > [13]={0}; mean? Why is there a zero in parenthesis?


    int sum[13] = {0};

    declares sum to be an array of 13 integers, and initializes all elements of
    the array to zero. The
    {0}
    is short form for
    {0,0,0,0,0,0,0,0,0,0,0,0,0}


    > Also
    > #define str(s) # s
    >> #define xstr(s) str(s)

    >
    > What does that code do?


    The first #define defines a macro that expands into the macro argument
    preceded by the "stringize" macro operator. The second #define defines a
    macro that uses the first macro to change it's argument into a string.

    Together, they make it such that, with
    #define THROWS 1000
    the macro invocation
    xstr(THROWS)
    expands to
    str(1000)
    which expands to
    # 1000
    which "stringizes" into the C string
    "1000"

    > The rest I can pretty much make out. But what does the % after rand mean?


    That's the C "modulo" operator. It provides the remainder of an integer
    division. 3 / 2 == 1
    3 % 2 == 1 == (3 - ((3/2)*2))


    > This is how to learn C.


    --
    Lew Pitcher

    Master Codewright & JOAT-in-training | Registered Linux User #112576
    http://pitcher.digitalfreehold.ca/ | GPG public key available by request
    ---------- Slackware - Because I know what I'm doing. ------
     
    Lew Pitcher, Apr 28, 2008
    #14
  15. "Bartc" <> writes:
    > "Keith Thompson" <> wrote in message
    > news:...
    >> "Bill Cunningham" <> writes:
    >>> [snip]
    >>> Say you have two dice of six sides. Can you use rand() to create 12
    >>> options by rolling the die. Now there's another way you can do this
    >>> simply
    >>> but using arrays but I do not know how. Something like this.
    >>>
    >>> int a [12];
    >>>
    >>> Ok there's 12 objects or
    >>>
    >>> int a [20];
    >>>
    >>> like I want. I can use for to loop over them but I can't get randomness.
    >>> That's a feature I do not know how to reproduce. It will have to someway
    >>> depend on the system and most use the system time.

    >>
    >> You're still not making sense.
    >>
    >> If I roll two six-sided dice, there are 36 (6*6) possible outcomes,
    >> not 12. I suppose you could divide these up into 12 sets of 3
    >> outcomes each, but I suspect that's not what you had in mind.

    >
    > I make it only 11 outcomes (1+1 to 6+6). Although if you listed all
    > combinations there would be 36.


    Exactly. 1+6 is distinct from 2+5, for example.

    > If certain combinations are important, then you can list the 6 outcomes for
    > each die separately, totalling 12 outcomes.


    Only if you first randomly choose one of the two dice to throw by
    itself.

    --
    Keith Thompson (The_Other_Keith) <>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 28, 2008
    #15
  16. pete <> writes:
    > Keith Thompson wrote:
    >> "Bartc" <> writes:
    >>> "Keith Thompson" <> wrote in message
    >>> news:...
    >>>> "Bill Cunningham" <> writes:
    >>>>> [snip]
    >>>>> Say you have two dice of six sides. Can you use rand() to create 12
    >>>>> options by rolling the die. Now there's another way you can do
    >>>>> this simply
    >>>>> but using arrays but I do not know how. Something like this.
    >>>>>
    >>>>> int a [12];
    >>>>>
    >>>>> Ok there's 12 objects or
    >>>>>
    >>>>> int a [20];
    >>>>>
    >>>>> like I want. I can use for to loop over them but I can't get randomness.
    >>>>> That's a feature I do not know how to reproduce. It will have to someway
    >>>>> depend on the system and most use the system time.
    >>>> You're still not making sense.
    >>>>
    >>>> If I roll two six-sided dice, there are 36 (6*6) possible outcomes,
    >>>> not 12. I suppose you could divide these up into 12 sets of 3
    >>>> outcomes each, but I suspect that's not what you had in mind.
    >>> I make it only 11 outcomes (1+1 to 6+6). Although if you listed all
    >>> combinations there would be 36.

    >>
    >> Exactly. 1+6 is distinct from 2+5, for example.

    >
    > But more controversially, 1+6 is distinct from 6+1,
    > if you think that there are 36 (6*6) possible outcomes.


    There are 36 equally probable outcomes. Use differently colored dice
    to make this clearer.

    But the point is that the OP was talking about 12 outcomes, which
    doesn't make any sense unless he wants to divide the 36 outcomes into
    12 sets of 3 each. I seriously doubt that that's what he had in mind,
    though; he probably was thinking that 6 outcomes for one die plus 6
    for the other equals 12 possible outcomes.

    --
    Keith Thompson (The_Other_Keith) <>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 28, 2008
    #16
  17. Bill Cunningham

    Bartc Guest

    "Keith Thompson" <> wrote in message
    news:...
    > "Bartc" <> writes:
    >> "Keith Thompson" <> wrote in message
    >> news:...
    >>> "Bill Cunningham" <> writes:
    >>>> [snip]
    >>>> Say you have two dice of six sides. Can you use rand() to create 12
    >>>> options by rolling the die. Now there's another way you can do this
    >>>> simply
    >>>> but using arrays but I do not know how. Something like this.
    >>>>
    >>>> int a [12];
    >>>>
    >>>> Ok there's 12 objects or
    >>>>
    >>>> int a [20];
    >>>>
    >>>> like I want. I can use for to loop over them but I can't get
    >>>> randomness.
    >>>> That's a feature I do not know how to reproduce. It will have to
    >>>> someway
    >>>> depend on the system and most use the system time.
    >>>
    >>> You're still not making sense.
    >>>
    >>> If I roll two six-sided dice, there are 36 (6*6) possible outcomes,
    >>> not 12. I suppose you could divide these up into 12 sets of 3
    >>> outcomes each, but I suspect that's not what you had in mind.

    >>
    >> I make it only 11 outcomes (1+1 to 6+6). Although if you listed all
    >> combinations there would be 36.

    >
    > Exactly. 1+6 is distinct from 2+5, for example.
    >
    >> If certain combinations are important, then you can list the 6 outcomes
    >> for
    >> each die separately, totalling 12 outcomes.

    >
    > Only if you first randomly choose one of the two dice to throw by
    > itself.


    They're identical. It doesn't matter which one is thrown first. Just program
    the machine 'not to look' until the second one is thrown.

    Anyway it's not clear why arrays are needed. Each double throw can be
    represented by a single char value.

    --
    Bartc
     
    Bartc, Apr 28, 2008
    #17
  18. Gordon Burditt wrote:
    >> Say you have two dice of six sides. Can you use rand() to create
    >> 12 options by rolling the die.

    >
    > Note that rolling two dice of six sides each (adding the results)
    > and rolling one die of 12 sides does NOT generate the same probability
    > distribution.

    Esp. the probabily of a 1 is 0 with 2 dice.

    Bye, Jojo
     
    Joachim Schmitz, Apr 28, 2008
    #18
  19. Bill Cunningham wrote:
    > "Keith Thompson" <> wrote in message
    > news:...
    >
    >> I wrote the above. When you posted your followup, your newsreader
    >> should have provided an attribution line, something like
    >>
    >> Keith Thompson <> writes:
    >>
    >> Please leave that line in place. Quoting somebody without
    >> attribution is considered rude. (I think I've told you this before.)

    >
    > Now is this how it should be. I'm using outlook express :( It

    Me too, and I never had that issue.

    > took me awhile way way back to learn not to top post. Sorry I will
    > work on this. I have to do it all manually.

    Have a look at OE-QuoteFix. It solves several weaknesses of OE

    Bye, Jojo
     
    Joachim Schmitz, Apr 28, 2008
    #19
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. engsol
    Replies:
    2
    Views:
    965
    Dan Bishop
    Jan 26, 2004
  2. Replies:
    8
    Views:
    491
    Magnus Lycka
    Aug 5, 2005
  3. Peter Hansen
    Replies:
    0
    Views:
    724
    Peter Hansen
    Feb 22, 2006
  4. Peter Hansen
    Replies:
    0
    Views:
    615
    Peter Hansen
    Feb 22, 2006
  5. flamesrock
    Replies:
    8
    Views:
    502
    Hendrik van Rooyen
    Nov 24, 2006
Loading...

Share This Page