C语言模拟两数之差概率计算

准备模拟一下10000次内两个数之差小于20的概率,但是输出结果是1和0,无法达到预期

#include 
#include 
int main()
{
    srand((unsigned)time(NULL));
    int i = 0;
    int count1 = 0;
    int count2 = 0;
    double percent1 = 0.0;
    double percent2 = 0.0;
    for (i = 1; i < 10000; i++)
    {
        long a = rand();
        long b = rand();
        if ((a - b) < 20 || (b - a) < 20)
        {
            count1++;
        }
        else
        {
            count2++;
        }
    }
    percent1 = count1 / (count1 + count2);
    percent2 = count2 / (count1 + count2);
    printf("percent1=%lf,percent2=%lf\n", percent1, percent2);
    return 0;
}

img

两个数之差,这两个数的范围是多少?
这段代码的主要问题出在第 15 行:if ((a - b) < 20 || (b - a) < 20) ,这个判断条件,每次生成的两个数 a b 都符合这个条件,count1++; 造成最后count1 = 9999,count2 = 0。修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand((unsigned int)time(NULL));
    int i = 0;
    int count1 = 0;
    int count2 = 0;
    double percent1 = 0.0;
    double percent2 = 0.0;
    for (i = 1; i < 10000; i++)
    {
        long a = rand();
        long b = rand();
        if (abs(a - b) < 20)  //|| (b - a) < 20) 修改
        {
            count1++;
        }
        else
        {
            count2++;
        }
    }
    percent1 = count1 * 1.0 / (count1 + count2);
    percent2 = count2 * 1.0 / (count1 + count2);
    printf("percent1=%%%.2lf,percent2=%%%.2lf\n", percent1 * 100, percent2 * 100);
    return 0;
}


percent1 = count1 * 1.0 / (count1 + count2);
percent2 = count2 * 1.0 / (count1 + count2);
因为count1和count2都是整数,所以count1/(count1+count2)是整除,导致结果是0或1,不会出现小数。