opa95 a écrit:Bonjour
Le plus simple est de faire un script php et de l'essayer sur la box, tu verras si la précision te convient ou si le résultat du calcul est conforme à ton attente
Pour pi, il donne 3.1415926535898, je pense que ça devrait te suffire.
thrymartin a écrit:envoi le script et le calcul voulu
c'est peut être simplement un problème de parenthèse et de priorité d'un opérateur
pour le plugin point de rosée, ya jusqu'à un log et le résultat est conforme à ce qu'on obtient avec un tableur.
<?
// Conversion d'une date du calendrier grégorien en jour julien (JJD).
// Julien est en l'honneur de Jules Scaliger, le père du mathématicien qui a introduit ce calendrier
// (pour les dates antérieures au 4 octobre 1582).
// A compter du 15 octobre 1582, c'est le calendrier grégorien qui est utilisé ; il est toujours notre
// calendrier actuel.
// Pour mieux comprendre, l'année 1582 a été raccourcie de 10 jours : le lendemain du jeudi 4 octobre 1582
// devenant le vendredi 15 octobre 1582.
$J = date(j) ;
$M = date(n) ;
$A = date(Y) ;
$JJD = 367 * $A - floor('1.75' * (floor(($M + 9) / 12) + $A )) + floor(275 * $M / 9) - floor('0.75' * (1 + floor('0.01' * (floor(($M - 9) / 7) + $A)))) + $J + '1721028.5' ;
$aujourdhui = date('Y/m/d') ;
// Pour déterminer le jour de changement de saison pour une année comprise entre +1000 et +3000, voici le calcul à suivre (en jour Julien) :
$DT = ($A - 2000) / 1000 ;
$E_Spring = '2451623.80984' + '365242.37404' * $DT ; // jour de l'équinoxe de printemps
$S_Summer = '2451716.56767' + '365241.62603' * $DT ; // jour du solstice d'été
$E_Autumn = '2451810.21715' + '365242.01767' * $DT ; // jour de l'équinoxe d'automne
$S_Winter = '2451900.05952' + '365242.74049' * $DT ; // jour du Solstice d'hiver
// Conversion du jour julien en date du calendrier grégorien
$limites = array($E_Spring, $S_Summer, $E_Autumn, $S_Winter) ;
foreach ($limites as $key) {
$a = $key + 32045 ;
$b = floor(4 * ($a + 36524) / 146097) - 1 ;
$c = $a - floor(146097 * $b / 4) ;
$d = floor(4 * ($c + 365) / 1461) - 1 ;
$e = $c - floor(1461 * $d / 4) ;
$m = floor((5 * ($e - 1) + 2) / 153) ;
//Résultats :
$jour = round($e - floor(((153 * $m) + 2) / 5)) ;
$mois = $m + 3 - 12 * floor($m / 10) ;
if ($mois == 3) {
$spring = "/$mois/$jour" ;
}
if ($mois == 6) {
$summer = "/$mois/$jour" ;
}
if ($mois == 9) {
$autumn = "/$mois/$jour" ;
}
if ($mois == 12) {
$winter = "/$mois/$jour" ;
}
}
// Définition des saisons grâce à la formule de conversion
$saisons= array($winter => 'hiver' ,
$autumn => 'automne' ,
$summer => 'été' ,
$spring => 'printemps' ,
'/01/01' => 'hiver') ;
// Comparaison de la date d'aujourd'hui avec celle du changement de saison pour connaître la nôtre
sdk_header('text/xml') ;
foreach ($saisons AS $cle => $value) {
$saison = date('Y').$cle;
if (strtotime($aujourdhui)>=strtotime($saison)) {
echo "<root>" ;
echo "<date>".utf8_encode($aujourdhui)."</date>" ;
echo "<saison>".utf8_encode($value)."</saison>" ;
echo "</root>" ;
break ;
}
}
?>
opa95 a écrit:A priori, les formules qui nécessitent réellement une bonne précision sont les 4 qui calculent les dates des saisons en notation Julien
$E_Spring = '2451623.80984' + '365242.37404' * $DT ; // jour de l'équinoxe de printemps
opa95 a écrit:$DT varie de 0.001 à 1 pour les dates supérieures à 2000 et si tu testes les valeurs données par l'eedomus par rapport à une calculatrice, le résultat est bon à au moins 6 décimales près (peut-être mieux, je n'ai testé que 0.001 et 1).
Si tu veux réellement pinailler, les formules de ce type sont des approximations : il faudrait indiquer dans ce cas l'écart maximal entre la valeur calculée et la valeur vraie (Voir le site de l'observatoire de Paris). Si par malheur, le changement de saison se faisait au voisinage de minuit, tu pourrait encore avoir une valeur qui bascule d'un jour à l'autre à cause d'une seconde ou d'une minute d'erreur
merguez07 a écrit:Ton gars de l'IMCCE est il bien fiable ?
opa95 a écrit:"$E_Spring = '2451623.80984' + '365242.37404' * $DT ; // jour de l'équinoxe de printemps"
$E_Spring=2458928,657321 et non 2458928.6571575
La formule de départ est-elle exacte?
opa95 a écrit:Pour arriver au second résultat, il faut un terme du second ordre en $DT et pour que ça fonctionne aussi en 2100 (je n'ai pas été vérifier plus loin, il faudrait que j'ai les heures précises à la seconde près pour les siècles suivants).
$E_Spring = '2451623.80984' + ('365242.37404'-0.41*$DT) * $DT
TJL21 a écrit:Je lui fais donc confiance car, pour moi, il sait de quoi il parle (en tout cas, il est mieux placé que moi)
merguez07 a écrit:Donc du coup je comprends pas pourquoi il te dit que tes résultats sont différents des siens puisque la différence est de moins d'un minute et que lui utilise certainement une équation bien plus élaborée.
TJL21 a écrit:De ce que j'ai compris, la comparaison se fait à partir de le même formule mais, étant donné que la double précision est manquante "chez nous" (réflexion élaborée par lui en fonction de ce qui est obtenu avec le script), cela induit cette différence dans le résultat !
Retour vers Scripts & Périphériques du store
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invité(s)