Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 4 sur 12 PremièrePremière 123456789101112 DernièreDernière
Affichage des résultats 91 à 120 sur 331
  1. #91
    Hop, cadeau :

    Code:
    #include <stdio.h>
    #include <stdint.h>
    #include <stdlib.h>
    
    // p in Pascal
    // result in meters
    // Approximates the function
    // f = (((101325 / x) ^ 0.190223) - 1) * 44330.08;
    // in the domain [40960;106496]
    int16_t pressure_to_altitude(int32_t p)
    {
    	// Split the domain into 8 intervals from 40960 to 105728
    	// Approximate the function by a degree-2 polynomial in each interval
    	struct { int64_t p0; int32_t p1; int16_t p2; }
    		static const coeffs[] = {
    		{ 35795727448128, -1042448034, 12462 },    // in [40960;49152], error = 0.80951611993493776711245609581499619714315753029553
    		{ 28086794889324, -840897244, 8629 },    // in [49152;57344], error = 0.474799929040441506427073063081948032935080914747029
    		{ 21773918533619, -700885309, 6300 },    // in [57344;65536], error = 0.30018159785032809444115203457430196706491908525297
    		{ 16452901730270, -598438494, 4786 },    // in [65536;73728], error = 0.20120032429450890214321783461333055282725558564658
    		{ 11870206341953, -520491130, 3749 },    // in [73728;81920], error = 0.14170511581801910239701078064260695685954381904145
    		{ 7856891565555, -459363604, 3010 },    // in [81920;90112], error = 0.102858579232502722242344676757379695070697753320511
    		{ 4295019137961, -410249303, 2466 },    // in [90112;98304], error = 7.6857608182274683964630313720095645400848430388807e-2
    		{ 1099167366159, -369990149, 2054 },    // in [98304;106496], error = 5.9026577330911215789619856390339475180979511534459e-2
    	};
    	// Get index from high bits
    	int32_t i = (p >> 13) - 5;
    	// Get offset from low bits
    	int16_t x = p & ((1 << 13) - 1);
    	// Perform bound checks
    	if(i < 0) {
    		return 8336;	// Too high -> saturate
    	}
    	else if(i >= 8) {
    		return -418;	// Too low -> saturate
    	}
    	// Get polynomial coefficients
    	int64_t P0 = coeffs[i].p0;
    	int32_t P1 = coeffs[i].p1;
    	int16_t P2 = coeffs[i].p2;
    	// Evaluate polynomial
    	int64_t r = P0 + (int64_t)x * (P1 + (int32_t)x * P2);
    	return r >> 32;	// Truncate to whole meters.
    }
    
    int main(int argc, char * argv[])
    {
    	int p = atoi(argv[1]);
    	int a = pressure_to_altitude(p);
    	printf("%d\n", a);
    	return 0;
    }
    Pour l'utiliser, dégage tous les float et double qui trainent, enlève la division à la fin de la fonction pressure et fais-lui renvoyer la pression en Pascal sous forme d'entier (on utilise le système SI merde).

    Waring: ne pas utiliser pour le saut en scaphandre à plus de 8335m ou pour la plongée à moins de -417m. Aucune garantie expresse ou implicite sur la non-buggabilité du code. Néanmoins, le calcul des coefficients est prouvé en Coq et la précision est totalement overkill par rapport à celle des mesures et des constantes physiques, donc ça devrait le faire. J'ai laissé le nombre de chiffres significatifs par défaut sur les erreurs, ça donne l'impression qu'on est super précis.

  2. #92
    Citation Envoyé par Møgluglu Voir le message
    Hop, cadeau :

    Code:
    #include <stdio.h>
    #include <stdint.h>
    #include <stdlib.h>
    
    // p in Pascal
    // result in meters
    // Approximates the function
    // f = (((101325 / x) ^ 0.190223) - 1) * 44330.08;
    // in the domain [40960;106496]
    int16_t pressure_to_altitude(int32_t p)
    {
        // Split the domain into 8 intervals from 40960 to 105728
        // Approximate the function by a degree-2 polynomial in each interval
        struct { int64_t p0; int32_t p1; int16_t p2; }
            static const coeffs[] = {
            { 35795727448128, -1042448034, 12462 },    // in [40960;49152], error = 0.80951611993493776711245609581499619714315753029553
            { 28086794889324, -840897244, 8629 },    // in [49152;57344], error = 0.474799929040441506427073063081948032935080914747029
            { 21773918533619, -700885309, 6300 },    // in [57344;65536], error = 0.30018159785032809444115203457430196706491908525297
            { 16452901730270, -598438494, 4786 },    // in [65536;73728], error = 0.20120032429450890214321783461333055282725558564658
            { 11870206341953, -520491130, 3749 },    // in [73728;81920], error = 0.14170511581801910239701078064260695685954381904145
            { 7856891565555, -459363604, 3010 },    // in [81920;90112], error = 0.102858579232502722242344676757379695070697753320511
            { 4295019137961, -410249303, 2466 },    // in [90112;98304], error = 7.6857608182274683964630313720095645400848430388807e-2
            { 1099167366159, -369990149, 2054 },    // in [98304;106496], error = 5.9026577330911215789619856390339475180979511534459e-2
        };
        // Get index from high bits
        int32_t i = (p >> 13) - 5;
        // Get offset from low bits
        int16_t x = p & ((1 << 13) - 1);
        // Perform bound checks
        if(i < 0) {
            return 8336;    // Too high -> saturate
        }
        else if(i >= 8) {
            return -418;    // Too low -> saturate
        }
        // Get polynomial coefficients
        int64_t P0 = coeffs[i].p0;
        int32_t P1 = coeffs[i].p1;
        int16_t P2 = coeffs[i].p2;
        // Evaluate polynomial
        int64_t r = P0 + (int64_t)x * (P1 + (int32_t)x * P2);
        return r >> 32;    // Truncate to whole meters.
    }
    
    int main(int argc, char * argv[])
    {
        int p = atoi(argv[1]);
        int a = pressure_to_altitude(p);
        printf("%d\n", a);
        return 0;
    }
    Pour l'utiliser, dégage tous les float et double qui trainent, enlève la division à la fin de la fonction pressure et fais-lui renvoyer la pression en Pascal sous forme d'entier (on utilise le système SI merde).

    Waring: ne pas utiliser pour le saut en scaphandre à plus de 8335m ou pour la plongée à moins de -417m. Aucune garantie expresse ou implicite sur la non-buggabilité du code. Néanmoins, le calcul des coefficients est prouvé en Coq et la précision est totalement overkill par rapport à celle des mesures et des constantes physiques, donc ça devrait le faire. J'ai laissé le nombre de chiffres significatifs par défaut sur les erreurs, ça donne l'impression qu'on est super précis.
    Purée, là je dis Monsieur.
    Par contre, pas de retour là-dessus avant 10 jours, je pars en vacances demain.

    Tu as des sources sur la méthode que tu as utilisé (la décomposition en intervalles et l'approximation en polynômes du second degré) ?

  3. #93
    Citation Envoyé par LaVaBo Voir le message
    Tu as des sources sur la méthode que tu as utilisé (la décomposition en intervalles et l'approximation en polynômes du second degré) ?
    Le pifomètre : j'ai essayé avec différentes tailles d'intervalles et différents degrés de polynômes pour arriver à une approximation raisonnable au mètre près. J'aurais pu aussi utiliser des approximations de degré 1 sur 64 intervalles. La méthode de l'approximation polynomiale par morceau est classique, c'est généralement ce qu'on utilise pour implémenter les fonctions mathématiques de math.h.
    Pour générer les coefficients j'utilise Sollya. J'ai écrit ce script pour générer le contenu de la table :
    Code:
    f = (((101325 / x) ^ 0.190223) - 1) * 44330.08;
    
    for j from 0 to 7 do {
    	interval = [0;8192];
    	f2 = f(x + j*8192+40960);
    	P = fpminimax(f2,2,[|32...|],interval, fixed, absolute);
    	write("\t\t{ ");
    	for i from 0 to degree(P)-1 do {
    		write(coeff(P, i) * 2^32, ", ");
    	};
    	write(coeff(P, degree(P)) * 2^32, " },");
    	err = dirtyinfnorm(P(x)-f2(x), interval);
    	write("    // in ", [j*8192+40960;(j+1)*8192+40960], ", error = ", err, "\n");
    };
    Les maths qui sont derrière la fonction fpminimax sont plutôt hardcore, que même le papier qui le décrit a du code LaTeX dans le titre. C'est basé sur l'algo de Remez pour obtenir un premier polynôme à coefficients réels, suivi d'une réduction de réseau euclidien à coups de LLL pour trouver des coefficients entiers qui minimisent l'erreur. Tu es content d'avoir posé la question, hein ?

    Note que c'est de l'enculage de mouches dans le cas présent. On aurait aussi bien pu générer les coefficients dans Maple et les arrondir à l'entier le plus proche, ça aurait marché aussi bien.
    Dernière modification par Møgluglu ; 06/08/2015 à 14h50.

  4. #94
    Il manque le plus important : c'est de la WTFPL ? Sinon chapeau . Et Remez, ca va direct sur du Chebychev, donc c'est que ca doit être du bon.

    (Je demande pour la licence, parce qu'il me semblait avoir lu des histoires justement avec des problèmes de mesures d'altitudes avec un arduino. Et que 99% des gens recopiaient une formule au pif, sans doute la même qu'a trouvé LaVaBo. Donc une implémentation en virgule fixe, ca pourrait être utile à pas mal de monde. Après, il faudrait se pencher sur l'histoire de ladite formule et si elle est efficace.)

    Et si un polynome d'ordre 2 ne suffit plus, il y a toujours zunzun qui fitte 12000 équations et qui sort la meilleure. Le service online a malheureusement disparu .

  5. #95
    Citation Envoyé par weedkiller Voir le message
    Il manque le plus important : c'est de la WTFPL ? Sinon chapeau . Et Remez, ca va direct sur du Chebychev, donc c'est que ca doit être du bon.
    On va dire que c'est du WTFPL, ouais. De toute façon, sans recalculer les coefficients, tu ne vas pas aller très loin avec ça.

    Oui c'est de la bonne. Ça fait mieux que Chebychev, d'ailleurs. Le polynôme de Chebychev est optimal pour minimiser la norme infinie de l'erreur, mais ses coefficients sont des réels, que tu ne sais pas représenter en machine. Et si tu arrondis les coefficients à l'entier ou flottant le plus proche, tu perds l'optimalité. Ici, on résout le problème de trouver un polynôme à coefficients entiers (ou flottants, c'est pareil à une puissance de 2 près) qui minimise la norme infinie.
    Mais c'est surtout utile pour des polynômes d'ordre 15 ou 20. Sur du degré 2 c'est overkill.

    Et si un polynome d'ordre 2 ne suffit plus, il y a toujours zunzun qui fitte 12000 équations et qui sort la meilleure. Le service online a malheureusement disparu .
    C'est quand tu as un jeu de données immenses et tu veux une première approximation pour initialiser un solveur, c'est ça ?

  6. #96
    Oui, c'est quand t'as des données et que t'aimerais trouver la fonction qui fitte le mieux sans utiliser ton cerveau. C'est très pratique en entreprise . Parce que les "trends" d'excel c'est un peu limité parfois.

  7. #97

  8. #98
    Canards fan d’électronique, je suis entrain de réparer un electrificateur de clôture. Je pense que c'est un des condensateur qui est mort, mais j'ai dû mal à comprendre ses caractéristique techniques, dessus j'ai d'indiqué "4 12/11 10% L04826". Le montage est alimenté en 12 Volt, je suppose que le 12 correspond à ça, le 10% la tolérence, mais je ne sais pas si c'est le 4 ou le 11 qui indique la capacité. Sauriez vous m'éclairer ? Merci d'avance.
    Signature merde !

  9. #99
    Avec une photo peut être!
    C'est bizarre qu'il n'y ait pas d'unité (µF,nF...) sur ce type de "condensateur".
    "On peut rire de tout, mais pas avec n'importe qui." Pierre desproges

  10. #100
    Citation Envoyé par J-D Voir le message
    Avec une photo peut être!
    C'est bizarre qu'il n'y ait pas d'unité (µF,nF...) sur ce type de "condensateur".
    Voilà, voilà :
    Signature merde !

  11. #101
    Citation Envoyé par Félire Voir le message
    Difficile à dire. Peut être un 4uF mais sans aucune certitude.
    Le 12/11 pour moi c'est une date de fabrication(mois/année).
    Ce genre de condensateur est fait pour de la haute tension (450v ou plus), pas pour du simple 12V.
    Le mieux serait de demander ces infos au distributeur.
    "On peut rire de tout, mais pas avec n'importe qui." Pierre desproges

  12. #102
    C'était peut être pas ca qui était en panne. T'as essayé de voir des tensions sur ton circuits avant de l'enlever ? Sinon, il va falloir que t'essayes de l'ouvrir, vu la gueule qu'il avait sur les autres photos, si ca se trouve t'auras un vrai condensateur avec des vraies références à l'intérieur. Mais vu qu'il avait l'air moulé dans du plastique... bon courage.

  13. #103
    section SAV du site http://www.chapron-international.com...?lng=fr&pg=46/ on voit les références des condensateurs sur les fiches techniques de chaque modèle.
    L'unité utilisée c'est du uF

  14. #104
    Citation Envoyé par SeanRon Voir le message
    section SAV du site http://www.chapron-international.com...?lng=fr&pg=46/ on voit les références des condensateurs sur les fiches techniques de chaque modèle.
    L'unité utilisée c'est du uF
    Ah merci. Mais où est ce que tu as vu que l'unité était bien du uF ? Et les références des fiches sont celle de Chapron. Et si je passe par eux pour acheter le condensateur à mon avis ils vont m'enfumer.
    Signature merde !

  15. #105
    En recoupant les valeurs des différents condos des divers modèles, ça me parait le plus probable. ( U400, U1000, 10000 ... )

  16. #106
    4 µF pour tazer un bovin à 2,5J en 15000V, alors que sur le modèle pour canasson à 0,7J en 10000V on voit un condo électrolytique de 6000 µF en 16V ? J'ai un doute...
    U400, ça peut aussi bien vouloir dire 400 V.

    Si on fait le calcul pour le modèle à 0,7J, ça colle si le condo est en 15V. Si on suppose que c'est la même tension primaire pour le modèle à 2,5J, ton condo doit faire environ 22000µF. Vu la taille de l'engin ça me semble plus crédible.
    Après ça peut être aussi un condo plus petit avec une tension supérieure. Faut voir la gueule du circuit, mais avec une batterie 12V en entrée y'a pas des masses de possibilités.

  17. #107
    Citation Envoyé par Møgluglu Voir le message
    4 µF pour tazer un bovin à 2,5J en 15000V, alors que sur le modèle pour canasson à 0,7J en 10000V on voit un condo électrolytique de 6000 µF en 16V ? J'ai un doute...
    U400, ça peut aussi bien vouloir dire 400 V.

    Si on fait le calcul pour le modèle à 0,7J, ça colle si le condo est en 15V. Si on suppose que c'est la même tension primaire pour le modèle à 2,5J, ton condo doit faire environ 22000µF. Vu la taille de l'engin ça me semble plus crédible.
    Après ça peut être aussi un condo plus petit avec une tension supérieure. Faut voir la gueule du circuit, mais avec une batterie 12V en entrée y'a pas des masses de possibilités.
    Photo du montage :
    Signature merde !

  18. #108
    Citation Envoyé par Møgluglu Voir le message
    4 µF pour tazer un bovin à 2,5J en 15000V, alors que sur le modèle pour canasson à 0,7J en 10000V on voit un condo électrolytique de 6000 µF en 16V ? J'ai un doute...
    U400, ça peut aussi bien vouloir dire 400 V.

    Si on fait le calcul pour le modèle à 0,7J, ça colle si le condo est en 15V. Si on suppose que c'est la même tension primaire pour le modèle à 2,5J, ton condo doit faire environ 22000µF. Vu la taille de l'engin ça me semble plus crédible.
    Après ça peut être aussi un condo plus petit avec une tension supérieure. Faut voir la gueule du circuit, mais avec une batterie 12V en entrée y'a pas des masses de possibilités.
    Je pense qu'il faut pas trop se fier à la taille des condos. A mon avis ils sont moulés dans de la colle et un tube en PVC pour des raisons d'humidité et de contraintes extérieures. Félire, t'as testé aussi la résistance série du condensateur pour voir ? (La mesure des farad n'a pas marché, mais c'est un 2eme test à faire pour être encore plus sûr).

  19. #109
    Citation Envoyé par weedkiller Voir le message
    Je pense qu'il faut pas trop se fier à la taille des condos. A mon avis ils sont moulés dans de la colle et un tube en PVC pour des raisons d'humidité et de contraintes extérieures. Félire, t'as testé aussi la résistance série du condensateur pour voir ? (La mesure des farad n'a pas marché, mais c'est un 2eme test à faire pour être encore plus sûr).
    Tu veux dire tester la resistance ? Ca je peux le faire que si l'ensemble du montage est alimenté ? Hors montage j'avais rien en resistance sur le multimètre.
    Signature merde !

  20. #110
    Hors montage, si le condensateur est fonctionnel t'obtiens quelque chose sous la dizaine d'ohm entre ses contacts.

  21. #111
    Citation Envoyé par weedkiller Voir le message
    Hors montage, si le condensateur est fonctionnel t'obtiens quelque chose sous la dizaine d'ohm entre ses contacts.
    J'ai rien de chez rien hors montage en resistance. Donc je pense bien qu'il est cuit
    Ce qui est bête vu qu'il est mort c'est que je peux pas le mesurer pour connaitre ses caractéristiques
    Signature merde !

  22. #112
    Bah, tu as qu'à essayer avec un 22000µF. Au pire, tu risques juste d'électrocuter quelques vaches ou un promeneur aventureux et foutre le feu au tracteur.

    C'est calculé à la expert CPC : C = Q / V et W=1/2 * V Q, donc C = 2W/V², application numérique pour W=2,5J et V=15V -> C=22000µF

  23. #113
    Citation Envoyé par Møgluglu Voir le message
    Bah, tu as qu'à essayer avec un 22000µF. Au pire, tu risques juste d'électrocuter quelques vaches ou un promeneur aventureux et foutre le feu au tracteur.
    C'est pour des poneys

    Veux tu vraiment voir une de ces pauvres petites créatures mourir brulé ?
    Signature merde !

  24. #114
    Citation Envoyé par Félire Voir le message
    C'est pour des poneys


    Au fait tant qu'à s'occuper de l'état cardiovasculaire des poneys, c'est pas un peu costaud 2,6J et 15000V pour ces pauvres bébêtes ?

    Si j'interprète bien les petits dessins ça a l'air plutôt la gamme du Berger 9 en 0,3J à 6200V qui est conseillée pour ce genre de bestiole :
    http://www.chapron-international.com...hp?lng=fr&pg=5

    (RDJ: il faut un clôture électrifiée à 4,5J pour élever des éléphants. )

  25. #115
    Topsy lies in our heart forever .



    Sinon, pour pas rester HS, contacte le distributeur, parfois la pièce peut ne rien couter. Tu peux trouver une clavette pour un axe tondeuse à 57centimes en magasin de bricolage par exemple. Rien que le coût de recherche de référence, de manutention et de stockage doit être plus élevé . (Au final c'était pas la bonne ).

  26. #116

  27. #117
    moi je recherche un livre ( ou un site ) sympa genre l'Arduino pour les nuls. Mais qui ne soit pas << l'arduino pour les nuls.>>

  28. #118
    Si l'anglais te fait pas peur tu peux commencer avec les tutos Adafruit qui sont pas mal:
    https://learn.adafruit.com/series/learn-arduino

  29. #119
    Citation Envoyé par SeanRon Voir le message
    moi je recherche un livre ( ou un site ) sympa genre l'Arduino pour les nuls. Mais qui ne soit pas << l'arduino pour les nuls.>>
    Un des bons moyens de se lancer aussi, c'est de se lancer dans un petit projet. Si tu as une idée de trucs que tu voudrais faire, je suis sûr que nombre de canards seraient enchanté de t'aider.
    Signature merde !

  30. #120
    Le MOOC sur Coursera, fait par l'EPFL, c'est un bon point d'entrée.
    Mes propos n'engagent personne, même pas moi.

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •