qsort() 不适用于长整数数组

qsort() doesnot work with an array of long integers

我的代码

#include <stdio.h>
#include <stdlib.h>

int compare (const void * a, const void * b)
{
    return ( *(long*)a - *(long*)b );
}

int main()
{
    long arr[50] = {
    96998584605411,40693566272356,
    8867531321455,71374670306442,
    57352857357994,1788166056027,
    63349502945247,59799324891707,
    26353174130397,39181960858171,
    88760729874506,77735622774927,
    65389382041144,83564210278376,
    34210610714041,25960810689062,
    30915481991565,46863920152180,
    39693165577270,81307468736394,
    20993925693066,14707273086616,
    51940778082526,28031438753382,
    51923056867661,16931703600607,
    31109898828992,89599450093153,
    34498804713695,36774523858020,
    65593865433917,39538286624853,
    63312447540821,18796138114716,
    64794317568658,85850552382870,
    56557892707211,72388843001640,
    46583476931914,38539500078935,
    95031088595551,88735420786323,
    87050672468742,13877728078926,
    25045274978126,64616891994055,
    67682298778152,16659227331485,
    41265109202214,77090119561917
    };
    qsort(arr, 50, sizeof(long), compare);
    printf("Values are\n");
    int i ;
    for (i=0; i< 50; i++)
        printf("%ld\n", arr[i]);
}

打印其输出但未正确排序

值为

39538286624853
39693165577270
81307468736394
20993925693066
46583476931914
87050672468742
30915481991565
63312447540821
64794317568658
95031088595551
13877728078926
38539500078935
71374670306442
16931703600607
36774523858020
96998584605411
65593865433917
34210610714041
51923056867661
14707273086616
25045274978126
83564210278376
18796138114716
88735420786323
31109898828992
1788166056027
72388843001640
46863920152180
34498804713695
51940778082526
56557892707211
25960810689062
89599450093153
57352857357994
67682298778152
28031438753382
8867531321455
85850552382870
65389382041144
63349502945247
40693566272356
39181960858171
16659227331485
41265109202214
64616891994055
26353174130397
77090119561917
59799324891707
88760729874506
77735622774927

打印 qsorted 数组时我做错了什么?

而不是返回可能 1) 溢出或 2) 差异不适合 int

的比较
//return ( *(long*)a - *(long*)b );
return (*(long*)a > *(long*)b)  -   *(long*)a < *(long*)b);