@@ -1873,6 +1873,9 @@ S_CHANGESTAT_FN(s_edges) {
18731873/*****************
18741874 changestat: d_gwdegree
18751875*****************/
1876+
1877+ #define GWD0 (d0 ) ((decay) ? exp(loneexpd*(d0)) : (d0)==0)
1878+
18761879C_CHANGESTAT_FN (c_gwdegree ) {
18771880 int echange = 0 ;
18781881 double decay , loneexpd , change ;
@@ -1885,10 +1888,10 @@ C_CHANGESTAT_FN(c_gwdegree) {
18851888
18861889 /* *** don't forget tail -> head */
18871890 change = 0.0 ;
1888- echange = edgestate ? -1 :+1 ;
1889- taild = od [tail ] + id [tail ] + ( echange - 1 )/ 2 ;
1890- headd = od [head ] + id [head ] + ( echange - 1 )/ 2 ;
1891- change += echange * (exp ( loneexpd * taild )+ exp ( loneexpd * headd ));
1891+ echange = edgestate ? -1 :+1 ;
1892+ taild = od [tail ] + id [tail ] - edgestate ;
1893+ headd = od [head ] + id [head ] - edgestate ;
1894+ change += echange * (GWD0 ( taild ) + GWD0 ( headd ));
18921895
18931896 CHANGE_STAT [0 ] = change ;
18941897
@@ -1914,13 +1917,13 @@ C_CHANGESTAT_FN(c_gwdegree_by_attr) {
19141917
19151918 /* *** don't forget tail -> head */
19161919 echange = edgestate ? -1 :+1 ;
1917- taild = od [tail ] + id [tail ] + ( echange - 1 )/ 2 ;
1920+ taild = od [tail ] + id [tail ] - edgestate ;
19181921 tailattr = INPUT_PARAM [tail ];
1919- CHANGE_STAT [tailattr - 1 ] += echange * exp ( loneexpd * taild );
1922+ CHANGE_STAT [tailattr - 1 ] += echange * GWD0 ( taild );
19201923
1921- headd = od [head ] + id [head ] + ( echange - 1 )/ 2 ;
1924+ headd = od [head ] + id [head ] - edgestate ;
19221925 headattr = INPUT_PARAM [head ];
1923- CHANGE_STAT [headattr - 1 ] += echange * exp ( loneexpd * headd );
1926+ CHANGE_STAT [headattr - 1 ] += echange * GWD0 ( headd );
19241927
19251928}
19261929
@@ -1937,7 +1940,7 @@ C_CHANGESTAT_FN(c_gwidegree) {
19371940
19381941 /* *** don't forget tail -> head */
19391942 headd = IN_DEG [head ] - edgestate ;
1940- change += (edgestate ? -1.0 : 1.0 ) * exp ( loneexpd * headd );
1943+ change += (edgestate ? -1.0 : 1.0 ) * GWD0 ( headd );
19411944 CHANGE_STAT [0 ]= change ;
19421945}
19431946
@@ -1959,9 +1962,9 @@ C_CHANGESTAT_FN(c_gwidegree_by_attr) {
19591962
19601963 /* *** don't forget tail -> head */
19611964 echange = edgestate ? -1 : 1 ;
1962- headd = IN_DEG [head ] + ( echange - 1 )/ 2 ;
1965+ headd = IN_DEG [head ] - edgestate ;
19631966 headattr = INPUT_PARAM [head - BIPARTITE ]; /* BIPARTITE to make the b2 version a special case. */
1964- CHANGE_STAT [headattr - 1 ] += echange * exp ( loneexpd * headd );
1967+ CHANGE_STAT [headattr - 1 ] += echange * GWD0 ( headd );
19651968}
19661969
19671970/*****************
@@ -1977,7 +1980,7 @@ C_CHANGESTAT_FN(c_gwodegree) {
19771980
19781981 /* *** don't forget tail -> head */
19791982 taild = OUT_DEG [tail ] - edgestate ;
1980- change += (edgestate ? -1 : 1 ) * exp ( loneexpd * taild );
1983+ change += (edgestate ? -1 : 1 ) * GWD0 ( taild );
19811984 CHANGE_STAT [0 ] = change ;
19821985}
19831986
@@ -1999,9 +2002,9 @@ C_CHANGESTAT_FN(c_gwodegree_by_attr) {
19992002
20002003 /* *** don't forget tail -> head */
20012004 echange = edgestate ? -1 : 1 ;
2002- taild = OUT_DEG [tail ] + ( echange - 1 )/ 2 ;
2005+ taild = OUT_DEG [tail ] - edgestate ;
20032006 tailattr = INPUT_PARAM [tail ];
2004- CHANGE_STAT [tailattr - 1 ] += echange * exp ( loneexpd * taild );
2007+ CHANGE_STAT [tailattr - 1 ] += echange * GWD0 ( taild );
20052008}
20062009
20072010/******************** changestats: H ***********/
0 commit comments