La voix du secrétaire (Jean)
Présents à la réunion, en fonction de l'ordre d'arrivée
Impossible de mémoriser le nom kurde des plats que nous avons consommés. Quant aux boissons, nous avons bu de la Kilkenny, de la Guiness, une bière au nom allemand, un Porto et beaucoup de Coca-Cola.
La table centrale avec 10 places était réservée... par un autre groupe. Nous nous sommes donc agglutinés à six sur une table à 4 places. Julien a été hébergé à la table d'à côté, qui avait 4 places pour un groupe de 3. Lorsque Jérôme et Laurent sont arrivés, ils sont restés un certain temps debout, jusqu'à ce que Kai propose à Laurent d'échanger sa place assise contre une place debout. Heureusement, en fin de soirée, nous avons pu nous installer sur une table plus étendue.
Nous avons parlé de Perl, d'Internet (un tout petit peu), d'informatique et d'autres sujets.
perl -n -e 'print if /reg-exp/'Et cela fonctionne ! La raison ? Le fichier à analyser contenait des "\0", qui stoppaient l'analyse par le grep de GNU, mais qui ne gênent en rien les expressions rationnelles de Perl.
my %hachage = (First => 'Hello', Second => 'world', Third => '!');voire, en plus concis :
my %hachage = qw(First Hello Second World Third !);la seule façon d'initialiser un hachage en C# correspond au code Perl suivant :
my %hachage; $hachage{First} = 'Hello'; $hachage{Second} = 'World'; $hachage{Third} = '!';ou bien en copiant-collant un message du même Julien quelques jours plus tôt :
using System; using System.Collections; public class SamplesHashtable { public static void Main() { // Creates and initializes a new Hashtable. Hashtable myHT = new Hashtable(); myHT.Add("First", "Hello"); myHT.Add("Second", "World"); myHT.Add("Third", "!"); // Displays the properties and values of the Hashtable. Console.WriteLine( "myHT" ); Console.WriteLine( " Count: {0}", myHT.Count ); Console.WriteLine( " Keys and Values:" ); PrintKeysAndValues( myHT ); } public static void PrintKeysAndValues( Hashtable myHT ) { Console.WriteLine( "\t-KEY-\t-VALUE-" ); foreach ( DictionaryEntry de in myHT ) Console.WriteLine("\t{0}:\t{1}", de.Key, de.Value); Console.WriteLine(); }
1 / fastInvSqrt(x)ou
x * fastInvSqrt(x)Cela fait juste une opération de plus, c'est quand même assez rapide.
#include <stdio.h> #include <stdlib.h> float fastInvSqrt(float x) { float xhalf = 0.5f * x; int i = *(int*) &x; printf("%g\n%08X\n", x, i); i = 0x5f375a86 - (i >> 1); x = *(float*) &i; printf("%08X\n%g\n", i, x); x = x * (1.5f-xhalf * x * x); printf("%g\n", x); x = x * (1.5f-xhalf * x * x); printf("%g\n", x); x = x * (1.5f-xhalf * x * x); printf("%g\n----\n", x); return x; } main () { // printf("sizeof int = %d\n", sizeof (int)); fastInvSqrt(6e23); fastInvSqrt(6.626e-34); fastInvSqrt(1); fastInvSqrt(2); fastInvSqrt(3); fastInvSqrt(4); fastInvSqrt(1024); exit(0); }
Nombre | 6e+23 | 6.626e-34 | 1 | 2 | 3 | 4 | 1024 |
i initial | 66FE1C21 | 085C2FC6 | 3F800000 | 40000000 | 40400000 | 40800000 | 44800000 |
i final | 2BB84C76 | 5B0942A3 | 3F775A86 | 3F375A86 | 3F175A86 | 3EF75A86 | 3CF75A86 |
x0 | 1.30952e-12 | 3.86353e+16 | 0.966225 | 0.716225 | 0.591225 | 0.483113 | 0.0301945 |
x1 | 1.29059e-12 | 3.88468e+16 | 0.998308 | 0.70693 | 0.576846 | 0.499154 | 0.0311971 |
x2 | 1.29099e-12 | 3.88485e+16 | 0.999996 | 0.707107 | 0.57735 | 0.499998 | 0.0312499 |
x3 | 1.29099e-12 | 3.88485e+16 | 1 | 0.707107 | 0.57735 | 0.5 | 0.03125 |
x -> 1/x2 - aqui s'annule en 1/sqrt(a). La méthode de Newton consiste à partir d'une approximation x0, à repérer le point (x0, y0) sur la courbe, à tracer la tangente en ce point, trouver le point où cette tangente coupe l'axe des X et prendre l'abscisse comme nouvelle approximation x1. Et on itère le processus.
x -> 1/x2 - aest la fonction
x -> -2/x3donc l'équation de la tangente en xn est :
y = -2x/xn3 + 3/xn2 - aL'élément suivant de la liste est donc donné par :
-2xn+1/xn3 + 3/xn2 - a = 0soit :
xn+1 = xn(3/2 - a xn2 / 2)où vous reconnaissez la formule de fastInvSqrt, à condition de savoir distinguer les a et les x dans la fonction C.
x0 = sqrt(5/a)la suite oscille :
x1 = - sqrt(5/a)et ainsi de suite. Ou alors, avec
x2 = sqrt(5/a)
x3 = - sqrt(5/a)
x4 = sqrt(5/a)
x0 = sqrt(3/a)on obtient :
x1 = 0et ainsi de suite.
x2 = 0
x3 = 0
x4 = 0