{
  "version": "20260915f",
  "reviewed": "2026-09-15",
  "page": "https://www.calculatrice.com/math/pourcentage.html",
  "methodology": "Exemples arithmétiques rédigés pour Calculatrice.com. Attentes fixées indépendamment de l’exécution du moteur. Tolérance relative 1e-10, plancher absolu 1e-14 pour les nombres non nuls. Une erreur attendue ne réussit que si son message correspond.",
  "cases": [
    {
      "id": "variations-plus-moins-20",
      "section": "successives",
      "question": "Ajouter puis retirer 20 % ramène-t-il au départ ?",
      "method": "compound",
      "args": [
        100,
        [
          20,
          -20
        ]
      ],
      "expected": {
        "value": 96,
        "rate": -4
      },
      "result": "96, soit −4 % au total",
      "explanation": "100 × 1,20 = 120, puis 120 × 0,80 = 96. Les deux taux portent sur des bases différentes.",
      "a": "100",
      "b": "20; -20"
    },
    {
      "id": "remises-20-10",
      "section": "successives",
      "question": "Deux remises de 20 % puis 10 % font-elles 30 % ?",
      "method": "compound",
      "args": [
        200,
        [
          -20,
          -10
        ]
      ],
      "expected": {
        "value": 144,
        "rate": -28
      },
      "result": "144, soit 28 % de remise globale",
      "explanation": "200 × 0,80 × 0,90 = 144. Le coefficient global vaut 0,72 : la remise est de 28 %, pas de 30 %.",
      "a": "200",
      "b": "-20; -10"
    },
    {
      "id": "variation-trois-etapes",
      "section": "successives",
      "question": "Que donnent +10 %, −5 % puis +2 % sur 1 000 ?",
      "method": "compound",
      "args": [
        1000,
        [
          10,
          -5,
          2
        ]
      ],
      "expected": {
        "value": 1065.9,
        "rate": 6.59
      },
      "result": "1 065,9, soit +6,59 %",
      "explanation": "Les valeurs successives sont 1 100, 1 045 puis 1 065,9. Garder les décimales intermédiaires évite un écart d’arrondi.",
      "a": "1000",
      "b": "10; -5; 2"
    },
    {
      "id": "remise-totale",
      "section": "successives",
      "question": "Une hausse peut-elle récupérer une valeur après −100 % ?",
      "method": "compound",
      "args": [
        100,
        [
          -100,
          50
        ]
      ],
      "expected": {
        "value": 0,
        "rate": -100
      },
      "result": "0 : la valeur reste nulle",
      "explanation": "Une remise de 100 % donne zéro. Multiplier ensuite zéro par 1,50 donne toujours zéro.",
      "a": "100",
      "b": "-100; 50"
    },
    {
      "id": "taux-moyen-deux-ans",
      "section": "moyen",
      "question": "De 100 à 121 en deux ans : quel taux annuel moyen ?",
      "method": "averageRate",
      "args": [
        100,
        121,
        2
      ],
      "expected": {
        "rate": 10
      },
      "result": "+10 % par an",
      "explanation": "100 × 1,10 × 1,10 = 121. Le gain total de 21 % ne se divise pas simplement par deux.",
      "a": "100",
      "b": "121",
      "periods": "2"
    },
    {
      "id": "baisse-moyenne",
      "section": "moyen",
      "question": "De 100 à 81 en deux périodes : quelle baisse moyenne ?",
      "method": "averageRate",
      "args": [
        100,
        81,
        2
      ],
      "expected": {
        "rate": -10
      },
      "result": "−10 % par période",
      "explanation": "100 × 0,90 × 0,90 = 81. Les périodes doivent être de même durée.",
      "a": "100",
      "b": "81",
      "periods": "2"
    },
    {
      "id": "taux-moyen-zero-final",
      "section": "moyen",
      "question": "Quelle convention si la valeur finale devient nulle ?",
      "method": "averageRate",
      "args": [
        100,
        0,
        2
      ],
      "expected": {
        "rate": -100
      },
      "result": "−100 % dans la formule du taux constant",
      "explanation": "La racine de 0 est 0 : le taux constant vaut −100 %. Cela ne révèle pas à quelle date la perte a eu lieu.",
      "a": "100",
      "b": "0",
      "periods": "2"
    },
    {
      "id": "taux-moyen-base-nulle",
      "section": "moyen",
      "question": "Peut-on calculer un taux moyen de 0 à 100 ?",
      "method": "averageRate",
      "args": [
        0,
        100,
        2
      ],
      "error": "Valeur initiale et durée strictement positives",
      "result": "Non défini : base initiale nulle",
      "explanation": "Le rapport valeur finale / valeur initiale implique une division par zéro. Aucun taux relatif n’est donné.",
      "a": "0",
      "b": "100",
      "periods": "2"
    },
    {
      "id": "points-10-15",
      "section": "points",
      "question": "Passer de 10 % à 15 % : 5 points ou 50 % ?",
      "method": "points",
      "args": [
        10,
        15
      ],
      "expected": {
        "points": 5,
        "relative": 50
      },
      "result": "+5 points et +50 % de variation relative",
      "explanation": "La différence des taux est 15 − 10 = 5 points. Rapportée au taux initial, elle donne 5 / 10 × 100 = 50 %.",
      "a": "10",
      "b": "15"
    },
    {
      "id": "points-base-nulle",
      "section": "points",
      "question": "Passer de 0 % à 5 % donne-t-il une hausse de 5 % ?",
      "method": "points",
      "args": [
        0,
        5
      ],
      "expected": {
        "points": 5,
        "relative": null
      },
      "result": "+5 points ; pourcentage relatif non défini",
      "explanation": "La différence en points reste calculable. Le pourcentage relatif ne l’est pas, car sa base est nulle.",
      "a": "0",
      "b": "5"
    },
    {
      "id": "variation-base-negative",
      "section": "precision",
      "question": "Pourquoi passer de −100 à −50 donne-t-il −50 % ?",
      "method": "calculate",
      "args": [
        "variation",
        -100,
        -50
      ],
      "expected": -50,
      "result": "Taux algébrique −50 %, écart absolu +50",
      "explanation": "(−50 − (−100)) / (−100) × 100 = −50 %. La valeur augmente pourtant de 50 : une base négative inverse l’interprétation habituelle du signe.",
      "mode": "variation",
      "a": "-100",
      "b": "-50"
    },
    {
      "id": "petite-part-non-nulle",
      "section": "precision",
      "question": "Combien vaut 0,00000001 % de 1 ?",
      "method": "calculate",
      "args": [
        "part",
        1e-08,
        1
      ],
      "expected": 1e-10,
      "result": "0,0000000001, soit 1e−10",
      "explanation": "1 × 0,00000001 / 100 = 0,0000000001. La notation scientifique évite d’afficher à tort un résultat nul.",
      "mode": "part",
      "a": "0.00000001",
      "b": "1"
    }
  ]
}
