année bissextile calcul

pour trouver les années bissextiles, pourquoi l'année doit-elle être indivisible par 100 et divisible par 400? Je comprends pourquoi il doit être divisible par 4. Veuillez expliquer l'algorithme.

38
demandé sur Jon Seigel 2009-04-07 14:58:15

20 réponses

365.242196 - 0.25 = 364.992196 (en ajoutant 1 jour en 4 ans) : mais Oups, maintenant c'est trop petit!! ajoutons un centième d'un jour (en n'ajoutant pas ce jour une fois par cent ans :-))

364.992196 + 0,01 =365.002196 (oups, un peu trop grand, ajoutons qu'un jour de toute façon temps dans environ 400 ans)

365.002196 - 1/400 = 364.999696

presque là maintenant, il suffit de jouer avec sautsecondes de temps en temps, et vous êtes prêt.

(Note: la raison pour laquelle plus de corrections ne sont appliquées après cette étape est qu'une année change aussi de longueur!!, c'est pourquoi sautsecondes sont la solution la plus flexible, voir par exemple ici)

C'est pourquoi je pense que

91
répondu Peter 2012-02-29 08:06:25

Il y a un algorithme sur wikipédia pour déterminer les années bissextiles:

function isLeapYear (year):
    if ((year modulo 4 is 0) and (year modulo 100 is not 0))
    or (year modulo 400 is 0)
        then true
    else false

Il y a beaucoup d'informations à ce sujet sur le page de wikipédia sur les années bissextiles, informations inclusives sur les différents calendriers.

65
répondu Georg Schölly 2009-04-07 11:01:52

en termes généraux, l'algorithme pour calculer une année bissextile est le suivant...

Une année qui sera une année bissextile si elle est divisible par 4 mais pas par 100. Si l'année est divisible par 4 et par 100, ce n'est pas une année bissextile, sauf s'il est aussi divisible par 400.

ainsi les années comme 1996, 1992, 1988 et ainsi de suite sont des années bissextiles parce qu'elles sont divisibles par 4 mais pas par 100. Pour les siècles, la règle des 400 ans est importante. Ainsi, les années du siècle 1900, 1800 et 1700 tandis que tous encore divisible par 4 sont également exactement divisible par 100. Comme elles ne sont plus divisibles par 400, elles ne sont pas des années bissextiles!--1-->

12
répondu Ivan Prodanov 2009-04-07 11:01:46

c'est assez pour vérifier si une année est une année bissextile.

if( (year%400==0 || year%100!=0) &&(year%4==0))
    cout<<"It is a leap year";
else
    cout<<"It is not a leap year";
9
répondu x0v 2014-08-30 09:39:39

a) l'année est de 365,242199 jours.

b) si chaque année était de 365 jours, en 100 ans nous perdrions 24,2199 jours. C'est pourquoi nous ajoutons 24 jours par siècle (tous les 4 ans sauf lorsque divisible par 100)

c) mais on perd quand même 0.21299 jours/siècle. Dans 4 siècles, nous perdons 0.8796 jours. C'est pourquoi nous ajoutons 1 jour pour 4 siècles (chaque quatrième siècle compte une année bissextile).

d) mais cela signifie que nous perdons -0,1204 jours (nous allons de l'avant) par quadricentenaire (4 siècle.) Ainsi, en 8 années quadriennales (3200 ans), nous ne comptons pas une année bissextile.

et ainsi de suite... (d'ici là, nous aurons détruit la planète, de sorte qu'il n'a pas d'importance)

ce que je ne comprends pas, c'est pourquoi nous ne comptons pas une année bissextile tous les 500 ans au lieu de 400. De cette façon, nous rapprocherait plus rapidement à l'heure correcte (nous perdrions de 2,3 heures/500 ans).

8
répondu Theodore Zographos 2018-04-29 15:39:49

je suis sûr que Wikipédia peut l'expliquer mieux que moi, mais c'est essentiellement à voir avec le fait que si vous ajoutez un jour supplémentaire tous les quatre ans, nous serions en avance sur le soleil car son temps pour orbiter le soleil est inférieur à 365,25 jours donc nous compensons pour cela en n'ajoutant pas de jours bissextiles sur les années qui ne sont pas divisibles par 400 eg 1900.

Hope qui aide

6
répondu chillysapien 2009-04-07 11:04:30

Voici une simple implémentation du algorithme de Wikipédia, en utilisant l'opérateur ternaire javascript:

isLeapYear = (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0);
4
répondu Brad 2016-10-18 17:45:33

Vous devriez vraiment essayer de google.

Wikipédia explication des années bissextiles. algorithme votre description est pour le calendrier grégorien proleptique.

pour en savoir plus sur les maths autour de cela, consultez l'article Algorithmes De Calendrier.

3
répondu Davy Landman 2009-04-07 11:05:30

Return true si l'année d'entrée est une année bissextile

Base de jour moderne code:

  If year mod 4 = 0, then leap year
  if year mod 100 then normal year
  if year mod 400 then leap year
  else normal year

la règle D'Aujourd'hui a commencé 1582 après J.-C. La règle du calendrier julien avec chaque 4ème année commencée 46 avant JC mais n'est pas cohérente avant 10 après JC comme déclaré par Cesar. Ils ont cependant ajouté quelques années bissextiles tous les 3 ans de temps en temps dans les années avant: Les années bissextiles étaient donc 45 avant JC, 42 avant JC, 39 avant JC, 36 avant JC, 33 avant JC, 30 avant JC, 27 avant JC, 24 avant JC, 21 avant JC, 18 avant JC, 15 avant JC, 12 avant JC, 9 avant JC, 8 après JC, 12 après JC Avant L'année 45BC année bissextile n'a pas été ajouté. http://www.wwu.edu/depts/skywise/leapyear.html

L'an 0 n'existe pas comme il est ...2BC 1BC 1AD 2AD... pour certains calculs, cela peut être un problème.

function isLeapYear(year: Integer): Boolean;
begin
  result := false;
  if year > 1582 then // Todays calendar rule was started in year 1582 
    result := ((year mod 4 = 0) and (not(year mod 100 = 0))) or (year mod 400 = 0)
  else if year > 10 then // Between year 10 and year 1582 every 4th year was a leap year 
    result := year mod 4 = 0
  else //Between year -45 and year 10 only certain years was leap year, every 3rd year but the entire time
    case year of
      -45, -42, -39, -36, -33, -30, -27, -24, -21, -18, -15, -12, -9:
        result := true;
    end;
end;
3
répondu Eskil Mjelva Saatvedt 2014-03-12 12:52:45

Ne vaudrait-il pas mieux faire un pas de plus? En supposant que tous les 3200 année non bissextile, la longueur de l'année viendra

364.999696 + 1/3200 = 364.999696 + .0003125 = 365.0000085

et après cela, l'ajustement sera nécessaire après environ 120000 ans.

1
répondu Sandeep Agrawal 2011-12-28 16:39:54

PHP:

// is number of days in the year 366?  (php days of year is 0 based)
return ((int)date('z', strtotime('Dec 31')) === 365);
1
répondu self.name 2017-03-04 19:20:15

les années Bissextiles sont arbitraires, et le système utilisé pour les décrire est un homme fait construire. Il n'y a pas de pourquoi.

ce que je veux dire c'est qu'il pourrait y avoir une année bissextile tous les 28 ans et nous aurions une semaine de plus dans ces années bissextiles ... mais les puissances qui ont décidé de faire un jour tous les 4 ans pour rattraper.

c'est aussi à cause de la Terre qui prend 365,25 jours pour faire le tour du soleil, etc. Bien sûr, ce n'est pas vraiment 365,25 est-ce un peu moins ( 365.242222...), donc pour corriger cet écart, ils ont décidé de supprimer les années bissextiles divisibles par 100.

0
répondu inspite 2009-04-07 11:12:53

si vous êtes intéressé par les raisons de ces règles, c'est parce que le temps qu'il faut à la terre pour faire exactement une orbite autour du Soleil est une longue valeur décimale imprécise. Ce n'est pas exactement 365.25. Il est légèrement inférieur à 365,25, donc tous les 100 ans, un jour de leap doit être éliminé (365,25 - 0,01 = 365,24). Mais ce n'est pas tout à fait correct. La valeur est légèrement supérieure à 365.24. Ainsi, seulement 3 fois sur 4, la règle des 100 ans s'appliquera (ou en d'autres termes, additionnez en 1 jour tous les 400 ans; 365.25 - 0.01 + 0.0025 = 365.2425).

0
répondu BlueMonkMN 2009-04-07 11:13:06

la raison pour laquelle nous avons des années bissextiles tous les 4 ans est que cela nous amène à 365,25 en moyenne [(365+365+365+366) / 4 = 365.25, 1461 days in 4 years].

la raison pour laquelle nous n'avons pas d'années bissextiles sur les multiples de 100 est de nous amener à 365,24 `[(1461 x 25 - 1) / 100 = 365.24, 36,524 des jours dans 100 ans.

alors la raison pour laquelle nous avons encore une fois une année bissextile sur 400-multiples est de nous 365.2425 [(36,524 x 4 + 1) / 400 = 365.2425, 146,097 days in 400 years].

je crois qu'il peut y avoir une autre règle à 3600-multiples mais je n'ai jamais codé pour elle (Y2K était une chose, mais la planification pour un millier et demi d'années dans le futur n'est pas nécessaire à mon avis - gardez à l'esprit que j'ai eu tort avant).

Donc, les règles sont, en priorité décroissant:

  • multiple de 400 est une année bissextile.
  • multiple de 100 n'est pas une année bissextile.
  • multiple de 4 est bissextile an.
  • rien d'autre n'est une année bissextile.
0
répondu paxdiablo 2009-04-07 11:21:11

Voici un plutôt obsqure idée. Lorsque chaque année divisible par 100 obtient 365 jours, que doit être fait à ce moment? Dans un avenir lointain, quand même les années divisibles avec 400 seulement peuvent obtenir 365 jours.

il y a alors une possibilité ou une raison de faire des corrections en années divisibles par 80. Les années normales auront 365 jours et ceux divisibles avec 400 peuvent obtenir 366 jours. Ou est-ce un libre-libre de la situation.

0
répondu Finn Jensen 2013-04-22 12:00:58

vous pouvez simplement vérifier si le nombre D'années est divisible par 4 et 400. Vous n'avez pas vraiment besoin de vérifier si elle est indivisible par 100. La raison pour laquelle 400 est remise en question Est que selon le calendrier grégorien, notre "durée journalière" est légèrement diminuée, et donc pour compenser cela, nous avons 303 années régulières (365 jours chacune) et 97 années bissextiles (366 jours chacune). La différence de ces 3 années supplémentaires qui ne sont pas des années bissextiles est de rester dans le cycle avec le calendrier grégorien, qui répète tous les 400 an. Cherche L'équation de congruence de Christian Zeller. Cela aidera à comprendre la vraie raison. Espérons que cela aide :)

0
répondu Balaji 2014-05-01 00:33:25

Dans le calendrier Grégorien 3 critères doivent être pris en compte pour cerner les années bissextiles:

  1. l'année est également divisible par 4;
  2. Si l'année peut être divisée par 100, ce n'est PAS une année bissextile, à moins d';
  3. l'année est également divisible par 400. Alors, c'est une année bissextile. pourquoi l'année divisée par 100 n'est pas l'année bissextile
0
répondu Milon 2014-11-26 09:39:36

Python 3.5

def is_leap_baby(year):
    if ((year % 4 is 0) and (year % 100 is not 0)) or (year % 400 is 0):
        return "{0}, {1} is a leap year".format(True, year)
    return "{0} is not a leap year".format(year)

print(is_leap_baby(2014))
print(is_leap_baby(2012))
0
répondu Samuel 2016-12-25 17:19:31

Java le code ci-dessous calcule le nombre d'années bissextiles entre deux années données. Déterminer le commencement et le point de fin de la boucle.

static int calculateLeapYearCount(int year, int startingYear) {
        int min = Math.min(year, startingYear);
        int max = Math.max(year, startingYear);
        int counter = 0;
        for (int i = min; i < max; i++) {
            if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
                counter = counter + 1;
            }
        }
        return counter;
    }
0
répondu erhun 2017-01-07 19:20:18

a écrit dans le Café-Script:

is_leap_year = ( year ) ->
  assert isa_integer year
  return true   if year % 400 == 0
  return false  if year % 100 == 0
  return true   if year %   4 == 0
  return false

# parseInt? that's not even a word. 
# Let's rewrite that using real language:
integer = parseInt 

isa_number = ( x ) ->
  return Object.prototype.toString.call( x ) == '[object Number]' and not isNaN( x )

isa_integer = ( x ) ->
  return ( isa_number x ) and ( x == integer( x ) )

bien sûr, la vérification de validité faite ici va un peu plus loin que ce qui a été demandé, mais je trouve que c'est une chose nécessaire à faire dans une bonne programmation.

notez que les valeurs de retour de cette fonction d'indiquer les années bissextiles dans le " calendrier gregorien, donc pour l'an 1400, il indique false, alors qu'en fait cette année une année bissextile, selon les utilisé calendrier julien. je va encore laisser comme tel dans le datetime bibliothèque, je suis en train d'écrire parce que l'écriture de code correct pour traiter rapidement des dates devient étonnamment complexe, donc je ne soutenir le calendrier grégorien (ou payé pour un autre).

-2
répondu flow 2011-08-21 21:05:44