• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.

Need help: rand() C always returns 0

silentbogo

Moderator
Staff member
Joined
Nov 20, 2013
Messages
5,473 (1.44/day)
Location
Kyiv, Ukraine
System Name WS#1337
Processor Ryzen 7 3800X
Motherboard ASUS X570-PLUS TUF Gaming
Cooling Xigmatek Scylla 240mm AIO
Memory 4x8GB Samsung DDR4 ECC UDIMM
Video Card(s) Inno3D RTX 3070 Ti iChill
Storage ADATA Legend 2TB + ADATA SX8200 Pro 1TB
Display(s) Samsung U24E590D (4K/UHD)
Case ghetto CM Cosmos RC-1000
Audio Device(s) ALC1220
Power Supply SeaSonic SSR-550FX (80+ GOLD)
Mouse Logitech G603
Keyboard Modecom Volcano Blade (Kailh choc LP)
VR HMD Google dreamview headset(aka fancy cardboard)
Software Windows 11, Ubuntu 20.04 LTS
I'm using Code::Blocks to write the code and rand() function always return 0.
I tried to plant the seed with srand(time(NULL)), srand(opm_get_wtime()) and at least 10 different other methods, but it does not work...

Does anybody know how to fix this?

The general outline of my code looks like this:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>

int main()
{
    int toss;
    int number_in_circle = 0;
    int number_of_tosses = 10;
    double distance_squared;
    double x;
    double y;
    srand(time(NULL));
    for (toss=0;toss<number_of_tosses;toss++)
    {
        x = rand()/RAND_MAX - 1;
        y = rand()/RAND_MAX - 1;
        printf("x=%f",x);
        printf("y=%f\r\n",y);
        distance_squared = x * x + y * y ;
        if ( distance_squared <= 1) number_in_circle++;
    }
    int pi_estimate = 4*number_in_circle /((double) number_of_tosses );
    printf("Pi estimate: %d",pi_estimate);
    return 0;
}
 

W1zzard

Administrator
Staff member
Joined
May 14, 2004
Messages
27,028 (3.71/day)
Processor Ryzen 7 5700X
Memory 48 GB
Video Card(s) RTX 4080
Storage 2x HDD RAID 1, 3x M.2 NVMe
Display(s) 30" 2560x1600 + 19" 1280x1024
Software Windows 10 64-bit
what's with the -1 there? and why isn't it in ( ) together with RAND_MAX ?
also rand() returns an int, which you might want to cast to a double, so that division works as you assume it to work :)
 

silentbogo

Moderator
Staff member
Joined
Nov 20, 2013
Messages
5,473 (1.44/day)
Location
Kyiv, Ukraine
System Name WS#1337
Processor Ryzen 7 3800X
Motherboard ASUS X570-PLUS TUF Gaming
Cooling Xigmatek Scylla 240mm AIO
Memory 4x8GB Samsung DDR4 ECC UDIMM
Video Card(s) Inno3D RTX 3070 Ti iChill
Storage ADATA Legend 2TB + ADATA SX8200 Pro 1TB
Display(s) Samsung U24E590D (4K/UHD)
Case ghetto CM Cosmos RC-1000
Audio Device(s) ALC1220
Power Supply SeaSonic SSR-550FX (80+ GOLD)
Mouse Logitech G603
Keyboard Modecom Volcano Blade (Kailh choc LP)
VR HMD Google dreamview headset(aka fancy cardboard)
Software Windows 11, Ubuntu 20.04 LTS
what's with the -1 there? and why isn't it in ( ) together with RAND_MAX ?
also rand() returns an int, which you might want to cast to a double, so that division works as you assume it to work :)
Thx W1zzard! Had to change the type to int and it worked.
The actual calculation is:
Code:
x = 2*rand()/RAND_MAX - 1;
I'm trying to generate numbers between -1 and 1 for multithreaded version of Monte Carlo algorithm.
 
Top