Demo des Webworker-Interface (1/24)

Alle Zerlegungen x = m² + n² mit n ≥ m bestimmen (Dimension = 1/8 r2(x), für x = ungerade) Das ist zeitintensiv: ca 200ms für x ≈ 9e15.
      // Webworker-script: getestet bis x = 1e6 durch Vergleich mir r2 
      function decomp_2(x) { // alle Zerlegungen x = m^2 + n^2, mit n >= m,
      let da = [];
        if ((x % 4) == 3 || (x % 8) == 6) return da; // keine Zerlegung:  x (8) = 3,6,7
        for (let m=0;  m <= Math.sqrt(x/2); m++) {
          let n = Math.sqrt(x-m*m); 
          if (Number.isInteger(n)) da.push([m,n]);
        }
        return da;
      }
    
Da man direkt keine Parameter an WW übergeben kann, wird diese Funktion im Webworker-script "decomp_worker.js" gestartet mit
      onmessage = function(e) {
        let res = decomp_2(e.data);
        postMessage(res);
      }
    
Auf der HTML-Seite lautet der Code für 10 parallel gestartete WW
      for (let n=0; n < 10; n++) { // worker laufen parallel!
        let x = Math.floor(Math.random()*Number.MAX_SAFE_INTEGER);
        let w = new Worker("decomp_worker.js");
        w.onmessage = function(event){ // worker fertig
          let da = event.data; // die result-Arrays auswerten
          .... 
          w.terminate();
        };
        w.postMessage(x);
      }
    

Ohne Webworker


Mit Webworkern


nxnz(m,n)