La fonction puissance (1)
Réels et tests d'égalité
On ne devrait jamais faire de test d'égalité entre deux flottants. Par exemple, on a la déconvenue très conne :
🐍 Console Python>>> 0.1 + 0.2 == 0.3
False
Explications
Ceci est dû au stockage en binaire de 0.1, 0.2 et 0.3 qui ne sont pas représentés de manière exacte. D'autre part, il y a ensuite un arrondi possible à l'addition... Bref, on ne devrait pas faire de tests d'égalité entre flottants.
Mais la représentation d'un flottant x reste exacte lorsque x est le quotient d'un entier p (de taille raisonnable) par une puissance de 2 (avec exposant q raisonnable également). Exemples :
1.25 = 5 / 4
11.84375 = 379 / 32
Par conséquent, si \(x\) est représenté de manière exacte par \(\dfrac{p}{2^q}\) alors \(x^n\) également par \(\dfrac{p^n}{2^{q\times n}}\). (Tant que les entiers restent raisonnablement petits).
Dans cet exercice, les nombres sont choisis de façon à permettre l'utilisation des tests d'égalité entre flottants, sans erreurs.
Ne pas faire ça dans un autre cadre !
Le cadre
Pour un réel \(a\) et un entier naturel \(n\), on note \(a^n = a × a × ... × a\), avec \(n\) fois le facteur \(a\).
Ainsi
- \(3^4 = 3 × 3 × 3 × 3 = 81\)
- \(3^5 = 3 × 3 × 3 × 3 × 3 = 243\)
On a aussi
- \(3^1 = 3\), il y a un seul facteur égal à \(3\)
- \(3^0 = 1\), comme tout produit vide
Exercice 1
Coder une fonction itérative puissance qui prend deux arguments : a flottant et n entier naturel et qui renvoie a à la puissance n.
On garantit que 0 <= n < 1000.
.128013,5/fr;nb o=ylaepcwgu)vd*461`3kRmhétsP(Sà02i:050x0p0J0o0R0n0K0j0r0n0o0K0K0l010J0R0q010406050K0u0G0G0o0f0m040N0k0n0u0-0k0h050d0@0_0{0}0=0q04051d161g0d1d0=0x0R0w0#0%0)0+0H0R0t0H0n1u0H0J0:050W0i0n0p1p0(0*011t1v1x1v0J1D1F1B0J0f1e0J0H1H1r010e0Y0p0h0o0G0p010#100K0q0o0h0+0Q1B1/1;1Y1J1#1F1(1*0:0a0j0L0f0k0q0k0K0R130h0j0U1-0f0f0p0r2b161_0h1e0d1W2o1T1V1U1C0x1{0+1x0h1%281B1m1o0$1I2y0R2A0h0k2E1B0q2h1e2m2o2S0?1:2c2G1Z2L0f0`0n0:0B2l2W0;2V1`2Y1J2!2$0:0Q2*1;2,2m2x012;0o2%040D2^2n0=2{2/0+2~300z332`2W2|390:0c3c353e372}0k2#2 0:0A3c1h2Q162E2r0x1V2w3m0r2M1+1e3x1f3v2U172+053D0U2R3l1q1J0E0:0U0e3t363S0+0s0:0j3Y3R2H2}0e0:0q0u0R0)1;0r0p3)2.3!010/040M3_2X3{0h0:0o402|3}0b3c3(3Z3+4304153L2_2-413+3}0v0S4a4b3*1Z0r0B0:030j0G0I1W3E0j2a0I0f0o0-0w3^4h340j4M4q3`3+0K1@04010F1%0w0k0R1G0C0o0C0j0O0j0%0j3/3;0K3?4!0h0C0b4,0k0u0f0j2c020t0J0g0l0j0P013j4N4O4k2Z3.250x3:0J4a4j2|0k0:0l5g4c1Z0G0R2(564N5h3m3U040e3o5m4r2:0:0E5A4P1Z0k3$042J5F592:0i0:4F0h0t4J2U5n1J3}3 4K3Q5G5C4f463m4m4o5!0657575u425b2M5e5M5i5k5_3m4e2P5@2a5|3{5j040y624d445s4M5;3+5w2h0J4`4g2S583f5?5d615-163O0p2o2P6s3w1n3y2r2u2p0o1E6v0d3x0=6F0V0X0Z04.
Exercice 2
Coder une version récursive.
On garantit que 0 <= n < 1000.
.9888.128013x/.r;nbOylaeu)*d63Am(P02-@,5fq!7} _o={pcw~gv41`kRéhtsSàCji:E050r0n0#0m0+0l0$0J0P0l0m0$0$0M010#0+0O010406050$0o0v0v0m0f0k040%0L0l0o110L0h0J020m0v0O0g0J0Y0n1b0f0F0o0n0$050d181a1c1e160O04051J1C1M0d1J160r0+0T0_0{0}0 0!0+0S0!0l1!0!0#14050;0i0l0n1V0|0~011Z1#1%1#0#1-1/1+0#0f1K0#0!1;1X010E0?0n0h1p0n010_1h0$0O0m0h0 0z1+2h2j251?281/2b0v2d040b0J0x0f0L0O0L0$0+1k1m0/2f0f0f0n0P2H1C2o0h1K0d232T2022211,0r2q0 1%0h2a2E1+1S1U0`1=2%0+2)0h0L2-1+0O2M1K2R2T2~172i1m2/262@0f1b0l140V2Q3215312p341?3638140z3c2j3e2R2$013j0m39040t3n2S163q3h0 3t3v0U3y3p323r3E140D3H3A3J3C3s0L373u140s3O3f331W3i3T3k040H3H1N2|1C2-2W0r222#3R0P2^2w0.1T1K2{0n2}3d3+3^0/403g3#0 0X140/0E3+3B47010Q140J4d3Q4f0h0E140O0o0+0}2j0P0n4k462:0113040w4x3!4z0h140m4E3r4B0C3H4j4e4G140h4K3R4B0p0,3O0J4!4P4l4z0$2m04011u0h0T0L0+1:0W0m0W0J0(0J0{0J4q4s0$4u4=0h0W0C4}0L0o0f0J1m020S0#0g0M0J0y014Z4#3Z3r0P0V14030J0v0Z233_0J0f0Z0P582F0T4w1D3d064#4$4y2649040+4c5F3o5J4F354S4O5m3R0L140M0M5W4Q260v0+140y4U4f4B4Y5Q3z5I5I5X4f5M2M0#584T5=045S3r0v4o040V0e5-605H5l5(1?5M0n0@5E306d0 5:5k5@623R5{0:5~5%4%5U044J606p4f5Z040q6u5K3i4p4r4t0h4v5.4z4B4D605_4R6x6N264M6F5T6H045 2~6A4z6C0A6Y635+666V1?4W3Y0d433 3,6_0d3/1C0#3;6~2Z2U0m1.6{3/1I456Z0 2M0v0K0E0m0X0n0K0!0t141u1w1y1A0J5;301P3e2-3r0m0r0v1l2G0+1l0J2=0E6C1I7x7z7B2H0A110#1~040)0L1q1/0c2G0Z1N3e1J7T6L0n0f2b0h0#4{0m0J5D0f2F7E7Y0f0m115D4P201l0S040:2Q7~0h805x5z5B1T0n557E0O0n1j0J1S2M0J7p4{1:3^8g0r0o0_3u5A0l8h1:056^044~6K4v0w0m550h0p1C8z0J1A7-2J8y3_6#8J8Q5s0o0l110O1%0P7`7D0h0^2a201:0E0l0L1|2j0#0$0e7}2B857S0!0m5A2)0J5u8:0J180O2D0$0Z1:4`8o7-3^8%0;7,838^808c1m8e8p0+8j8l1/2f8p8r8!0l8u8L0$7-2{2C3T2H2)8v4`8P445 8z9j8h2G8@7 042(0Z0=2M9g9P8L1m9H3 9J8Q0e7!780j1m2@0#8n8n577-6S261c2G0!1b9-0c14090w099`0!9u0J0j0w8H098I6z1y2j2#0?9x9z2B2D0f9D6g4_4j8z9#449%7u168V3e1%040u2=2F552F0J7E509N7p05au16aw9Z8A6J507(0w670yaTaT0t550V0KaUaZaTa98K3~0h2#9=1?9@239`0n9|049~0y0C090G0V0R099{0#0N0$0Ia83H4N0daw160daJ1Cb805aw3u3T0$9L9l8N0Z8q9n1:aHbbaL8z8BaP8DaSaU0yaW0J0VaTa#0ybEa%8Ta)a+6k01a.9_7`a;9}aR0ya}a b1b3a92~8?178480bC0y0J7H4s4}1i8=9V8_bc0+3eba0lb@bdb^7#1K0+0v0S0J3u0#0 0a2e3R0#0Q1v0L0*5+920f0P1Y1|0O0$0,0d6@0r0h0e0*0$0/1%0T0f0e2)0#0d1#0d0*0/0P7h0r2Uca7Acd0B0V0D0eaS0d1=0:0$1D0T0S0d0z0s0m0y0e0$cX2e7P1/0 0,0Q1c0h2=0S0,010d610-1m5y3u7Y8m9r8N1:4|0v8V8X8Z8#7E0h008M4}0|2f9d911saE1:0r9:7)7/0i4;1m8ld68W121%7)8w4}0:2G0^2@0v0i2M8(9y5x0m0O0+0/55bg7=8k1z8Udw8Y4;590/dE7UdH7q1y0+aD7,8w0^5*0l1%1l0^2J0P1Z0E0EdI92dpb-0o0^2t7-0G9(3.3|b90/0;0?0$04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)