Integer roots: Difference between revisions
Content added Content deleted
(Added Ada solution) |
|||
Line 46: | Line 46: | ||
3rd root of 9 = 2 |
3rd root of 9 = 2 |
||
First 2001 digits of the square root of 2: 141421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723528850926486124949771542183342042856860601468247207714358548741556570696776537202264854470158588016207584749226572260020855844665214583988939443709265918003113882464681570826301005948587040031864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237289971803268024744206292691248590521810044598421505911202494413417285314781058036033710773091828693147101711116839165817268894197587165821521282295184884720896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171274026539694702403005174953188629256313851881634780015693691768818523786840522878376293892143006558695686859645951555016447245098368960368873231143894155766510408839142923381132060524336294853170499157717562285497414389991880217624309652065642118273167262575395947172559346372386322614827426222086711558395999265211762526989175409881593486400834570851814722318142040704265090565323333984364578657967965192672923998753666172159825788602633636178274959942194037777536814262177387991945513972312740668983299898953867288228563786977496625199665835257761989393228453447356947949629521688914854925389047558288345260965240965428893945386466257449275563819644103169798330618520193793849400571563337205480685405758679996701213722394758214263065851322174088323829472876173936474678374319600015921888073478576172522118674904249773669292073110963697216089337086611567345853348332952546758516447107578486024636008 |
First 2001 digits of the square root of 2: 141421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723528850926486124949771542183342042856860601468247207714358548741556570696776537202264854470158588016207584749226572260020855844665214583988939443709265918003113882464681570826301005948587040031864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237289971803268024744206292691248590521810044598421505911202494413417285314781058036033710773091828693147101711116839165817268894197587165821521282295184884720896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171274026539694702403005174953188629256313851881634780015693691768818523786840522878376293892143006558695686859645951555016447245098368960368873231143894155766510408839142923381132060524336294853170499157717562285497414389991880217624309652065642118273167262575395947172559346372386322614827426222086711558395999265211762526989175409881593486400834570851814722318142040704265090565323333984364578657967965192672923998753666172159825788602633636178274959942194037777536814262177387991945513972312740668983299898953867288228563786977496625199665835257761989393228453447356947949629521688914854925389047558288345260965240965428893945386466257449275563819644103169798330618520193793849400571563337205480685405758679996701213722394758214263065851322174088323829472876173936474678374319600015921888073478576172522118674904249773669292073110963697216089337086611567345853348332952546758516447107578486024636008 |
||
</pre> |
|||
=={{header|Ada}}== |
|||
<syntaxhighlight lang="ada"> |
|||
-- Find integer roots |
|||
-- J. Carter 2023 Jun |
|||
with Ada.Text_IO; |
|||
with System; |
|||
procedure Integer_Roots is |
|||
type Big is mod System.Max_Binary_Modulus; |
|||
function Root (N : in Positive; X : in Big) return Big With Pre => N > 1; |
|||
-- Returns the largest integer R such that R ** N <= X |
|||
-- Derived from Modula-2 |
|||
function Root (N : in Positive; X : in Big) return Big is |
|||
N1 : constant Positive := N - 1; |
|||
N2 : constant Big := Big (N); |
|||
N3 : constant Big := N2 - 1; |
|||
C : Big := 1; |
|||
D : Big := (N3 + X) / N2; |
|||
E : Big := (N3 * D + X / D ** N1) / N2; |
|||
begin -- Root |
|||
if X <= 1 then |
|||
return X; |
|||
end if; |
|||
Converge : loop |
|||
exit Converge when C = D or C = E; |
|||
C := D; |
|||
D := E; |
|||
E := (N3 * D + X / E ** N1) / N2; |
|||
end loop Converge; |
|||
return (if D < E then D else E); |
|||
end Root; |
|||
Large : constant Big := 2 * 10 ** 38; |
|||
-- On 64-bit platforms, recent versions of GNAT provide 128-bit integers |
|||
-- 10 ** 38 is the largest power of 10 < 2 ** 128 |
|||
begin -- Integer_Roots |
|||
Ada.Text_IO.Put_Line (Item => "Cube root of 8 =" & Root (3, 8)'Image); |
|||
Ada.Text_IO.Put_Line (Item => "Cube root of 9 =" & Root (3, 9)'Image); |
|||
Ada.Text_IO.Put_Line (Item => "Square root of" & Large'Image & " =" & Root (2, Large)'Image); |
|||
end Integer_Roots; |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Cube root of 8 = 2 |
|||
Cube root of 9 = 2 |
|||
Square root of 200000000000000000000000000000000000000 = 14142135623730950488 |
|||
</pre> |
</pre> |
||