• 0 Posts
  • 4 Comments
Joined 4 个月前
cake
Cake day: 2024年6月25日

help-circle

  • 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

    double ****mat = calloc (UMAX, sizeof(*mat));
    for (int u = 0; u < UMAX; ++u) {
      mat[u] = calloc (u + 1, sizeof(**mat));
      for (int v = 0; v <= u; ++v) {
        mat[u][v] = calloc (v + 1, sizeof(***mat));
        for (int w = 0; w <= v; ++w) {
          mat[u][v][w] = calloc (w + 1, sizeof(****mat));
          for (int ww = 0; ww <= w; ++ww)
            mat[u][v][w][ww] = some_function (u, v, w, ww);
        }
      }
    }
    

    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.


  • Yes, for the (anti-)electrons. Antiprotons and neutrons should be able to annihilate as well, and vice versa. They are composite particles made of (anti) up and down quarks, so processes like antiproton (anti u anti u anti d) + neutron (udd) -> photons + pi- (anti u d) ( + pi0 maybe) could happen. The pions are short-lived particles called mesons, made of a quark and an antiquark.