There have been multiple accounts created with the sole purpose of posting advertisement posts or replies containing unsolicited advertising.

Accounts which solely post advertisements, or persistently post them may be terminated.

renormalizer ,

I’ve been a four-star programmer a few times. Imagine a blocked symmetric matrix where the rows and columns are indexed by triples (u,v,w). The entries are zero whenever u != u’ or v != v’, and because of symmetry you only store entries with w <= w’. But the range of v depends on the value of u and the range of w on the value of v. So you do


<span style="font-weight:bold;color:#a71d5d;">double ****</span><span style="color:#323232;">mat </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#62a35c;">calloc </span><span style="color:#323232;">(UMAX, </span><span style="font-weight:bold;color:#a71d5d;">sizeof</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">mat));
</span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;"> u </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">0</span><span style="color:#323232;">; u </span><span style="font-weight:bold;color:#a71d5d;"><</span><span style="color:#323232;"> UMAX; </span><span style="font-weight:bold;color:#a71d5d;">++</span><span style="color:#323232;">u) {
</span><span style="color:#323232;">  mat[u] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#62a35c;">calloc </span><span style="color:#323232;">(u </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#0086b3;">1</span><span style="color:#323232;">, </span><span style="font-weight:bold;color:#a71d5d;">sizeof</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">**</span><span style="color:#323232;">mat));
</span><span style="color:#323232;">  </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;"> v </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">0</span><span style="color:#323232;">; v </span><span style="font-weight:bold;color:#a71d5d;"><=</span><span style="color:#323232;"> u; </span><span style="font-weight:bold;color:#a71d5d;">++</span><span style="color:#323232;">v) {
</span><span style="color:#323232;">    mat[u][v] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#62a35c;">calloc </span><span style="color:#323232;">(v </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#0086b3;">1</span><span style="color:#323232;">, </span><span style="font-weight:bold;color:#a71d5d;">sizeof</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">***</span><span style="color:#323232;">mat));
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;"> w </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">0</span><span style="color:#323232;">; w </span><span style="font-weight:bold;color:#a71d5d;"><=</span><span style="color:#323232;"> v; </span><span style="font-weight:bold;color:#a71d5d;">++</span><span style="color:#323232;">w) {
</span><span style="color:#323232;">      mat[u][v][w] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#62a35c;">calloc </span><span style="color:#323232;">(w </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#0086b3;">1</span><span style="color:#323232;">, </span><span style="font-weight:bold;color:#a71d5d;">sizeof</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">****</span><span style="color:#323232;">mat));
</span><span style="color:#323232;">      </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;"> ww </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">0</span><span style="color:#323232;">; ww </span><span style="font-weight:bold;color:#a71d5d;"><=</span><span style="color:#323232;"> w; </span><span style="font-weight:bold;color:#a71d5d;">++</span><span style="color:#323232;">ww)
</span><span style="color:#323232;">        mat[u][v][w][ww] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">some_function (u, v, w, ww);
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">  }
</span><span style="color:#323232;">}
</span>

and weep a little. In reality, this gets a bit optimized by allocating a single chunk of memory and carving that up into the pointer and data arrays, so everything is reasonably close together in memory.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • [email protected]
  • random
  • lifeLocal
  • goranko
  • All magazines