একটি সংখ্যার কিউব মূল গণনা করুন


12

এই কোড গল্ফের লক্ষ্য হ'ল এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা ইনপুট হিসাবে প্রদত্ত এমন সংখ্যার কিউব রুট গণনা করে এবং আউটপুট করে।
নিয়ম:

  • বাহ্যিক সংস্থান নেই
  • অন্তর্নির্মিত কিউব মূল কার্যকারিতা ব্যবহার করে না।
  • এমন কোনও পদ্ধতি / অপারেটর ব্যবহার নয় যা কোনও সংখ্যাকে শক্তিতে বাড়িয়ে তুলতে পারে (যার মধ্যে বর্গমূল, চতুর্থ মূল ইত্যাদি)।
  • আপনার ফাংশন / প্রোগ্রাম অবশ্যই ভাসমান পয়েন্ট নম্বর এবং নেতিবাচক সংখ্যা ইনপুট হিসাবে গ্রহণ করতে সক্ষম হতে হবে।
  • যদি কিউব মূলটি একটি ভাসমান-বিন্দু সংখ্যা হয় তবে দশমিক পয়েন্টের পরে এটি 4 টি সংখ্যায় গোল করুন।
  • এটি একটি কোড গল্ফ, বাইট জেতে সংক্ষিপ্ততম কোড।

পরীক্ষার কেস:

27 --> 3
64 --> 4
1  --> 1
18.609625 --> 2.65
3652264 --> 154
0.001 --> 0.1
7  --> 1.9129

নেতিবাচক সংখ্যাগুলি পরীক্ষা করার জন্য আপনি উপরের সমস্ত পরীক্ষার কেসগুলি ব্যবহার করতে পারেন ( -27 --> -3, -64 --> -4...)


অভিশাপ, যদি আপনি কেবল সংক্ষিপ্ত ঘনক্ষেত্রের সাথে সংখ্যার অনুমতি দেন তবে আমার কাছে একটি দুর্দান্ত গল্ফ থাকবে
yo

1
আপনার পরীক্ষার কেসগুলি বিচার করে আমি ধরে নিই যে প্রোগ্রামটির কেবলমাত্র বাস্তব সংখ্যা নিয়ে কাজ করা দরকার?
ব্যবহারকারী 12205

@ আরও জটিল যুক্ত করুন এবং আমি আমার কোডে 2 টি অক্ষর পরিবর্তন করি;)
'

2
দশমিক পয়েন্টের পরে 4 সংখ্যার চারপাশে কী জোরদার প্রয়োজন? অথবা এটি "দশমিক বিন্দু পরে 4 টির বেশি অঙ্ক দেখানোর প্রয়োজন নেই" এর মতো কিছু হতে পারে?
ভিক্টর স্টাফুসা

Exp (ln (x) / 3) (এবং এর বেশ কয়েকটি ক্লোন) ব্যবহার করে আমার উত্তরের প্রসঙ্গে দয়া করে Exp টি অনুমোদিত কিনা তা পরিষ্কার করে দিন। আমি ধরে নিলাম পা (x, 1/3) নয় (যদিও এটি প্রযুক্তিগতভাবে কিউব রুট ফাংশন নয় is)
স্তর নদী সেন্ট

উত্তর:


6

জে: 16 টি অক্ষর

হাস্কেল উত্তরের আলগা অনুবাদ:

-:@((%*~)+])^:_~

পরীক্ষার কেস:

   -:@((%*~)+])^:_~27
3
   -:@((%*~)+])^:_~64
4
   -:@((%*~)+])^:_~1
1
   -:@((%*~)+])^:_~18.609625
2.65
   -:@((%*~)+])^:_~3652264
154
   -:@((%*~)+])^:_~0.001
0.1
   -:@((%*~)+])^:_~7
1.91293

এটি এর মতো কাজ করে:

     (-:@((% *~) + ])^:_)~ 27
↔ 27 (-:@((% *~) + ])^:_) 27
↔ 27 (-:@((% *~) + ])^:_) 27 (-:@((% *~) + ])) 27
↔ 27 (-:@((% *~) + ])^:_) -: ((27 % 27 * 27) + 27)
↔ 27 (-:@((% *~) + ])^:_) 13.5185
↔ 27 (-:@((% *~) + ])^:_) 27 (-:@((% *~) + ])) 13.5185
↔ 27 (-:@((% *~) + ])^:_) -: ((27 % 13.5185 * 13.5185) + 13.5185)
↔ 27 (-:@((% *~) + ])^:_) 6.83313
...

শব্দসমূহে:

half =. -:
of =. @
divideBy =. %
times =. *
add =. +
right =. ]
iterate =. ^:
infinite =. _
fixpoint =. iterate infinite
by_self =. ~

-:@((%*~)+])^:_~ ↔ half of ((divideBy times by_self) add right) fixpoint by_self

একটি সেরা শব্দযুক্ত অনুবাদ নয়, যেহেতু একটি ডায়াডিক কাঁটাচামচ এবং ~শেষে একটি ডান।


19

হাস্কেল - 35

c n=(iterate(\x->(x+n/x/x)/2)n)!!99

উদাহরণ রান:

c 27  =>  3.0
c 64  =>  4.0
c 1  =>  1.0
c 18.609625  =>  2.6500000000000004  # only first 4 digits are important, right?
c 3652264  =>  154.0
c 0.001  =>  0.1
c 7  =>  1.9129311827723892
c (-27)  =>  -3.0
c (-64)  =>  -4.0

তদুপরি, আপনি যদি আমদানি Data.Complexকরেন তবে এটি জটিল সংখ্যার উপরেও কাজ করে, এটি সংখ্যার শিকড়গুলির একটিতে ফিরে আসে (সেখানে 3 রয়েছে):

c (18:+26)  =>  3.0 :+ 1.0

:+'প্লাস অপারেটর হিসাবে পড়তে হবে আমি টাইমসের


1
এটি একটি +1 প্রাপ্য। আমি গত এক ঘন্টা ধরে সাধারণীকরণ করা নবম মূল অ্যালগসকে পুনরুদ্ধার করছি এবং আমি এখন একই ফলাফলে পৌঁছেছি। সাবাস।
primo

@ প্রিমো আমি তত্ক্ষণাত্ সমস্ত মূল শিক্যসংক্রান্ত অ্যালগরিদমগুলি স্মরণ করলাম এবং এপিএলে টেলর / ম্যাক্লাউরিন সিরিজটি ছেড়ে দেওয়ার পরে আমি এটি ব্যবহার করেছি।
mniip

আমি পেয়েছি নিউটন পদ্ধতি ব্যবহার করে x=(2*x+n/x/x)/3, আপনি কেন ব্যবহার করতে পারবেন তা ব্যাখ্যা করতে পারেন x=(x+n/x/x)/2? এটি ধীরে ধীরে রূপান্তরিত হয় তবে কেন রূপান্তরিত হয় তা আমি ব্যাখ্যা করতে পারি না ...
মাইকেল এম

@ মিশেল কারণ যদি আপনি গ্রহণ করেন x=cbrt(n)তবে x=(x+n/x/x)/2সত্য। আপনার অভিব্যক্তির
জন্যও


7

সেজম্যাথ, (69) 62 বাইট

তবে কখনও বিশ্বাস করবেন না যে এটি আপনাকে ফলাফল দেবে, সমস্ত সংখ্যার মধ্য দিয়ে এলোমেলোভাবে যাওয়া খুব কঠিন:

def r(x):
 y=0
 while y*y*y-x:y=RR.random_element()
 return "%.4f"%y

যদি আপনি কাটাতে জিদ না করেন:

def r(x):
 y=0
 while y*y*y-x:y=RR.random_element()
 return y

সেজম্যাথ, 12 বাইট, যদি expঅনুমোদিত হয়

সমস্ত স্টাফের জন্য কাজ করে: ইতিবাচক, নেতিবাচক, শূন্য, জটিল, ...

exp(ln(x)/3)

আমি বিশ্বাস করি আপনি এমন একটি অপারেটর ব্যবহার করছেন যা কোনও পাওয়ারে একটি সংখ্যা বাড়িয়ে তুলতে পারে।
ব্যবহারকারী 12205

আহ ঠিক আছে, ঠিক আছে, সম্পাদিত
'

6
ম্যানুয়ালি বোকা অ্যালগরিদমের জন্য +1 যা এখনও প্রয়োজনীয়তাগুলি পূরণ করে।
যান্ত্রিক শামুক

ধন্যবাদ আমি আশা করি এটি সুস্পষ্ট যে আমি যা করি তা এক ধরণের মন্দা: ডি তবে যদি expঅনুমতি দেওয়া হয় তবে আমি নীচে নেমে যাচ্ছি এবং মোটেও বোকা নই :)
তুমি '

exp"সূচকীয় ফাংশন" এর জন্য এটি সংক্ষিপ্ত বিবেচনা করে , যা "এমন একটি ফাংশন যার মান একটি যুক্তির শক্তির কাছে ধ্রুবক, বিশেষত ফাংশন যেখানে ধ্রুবক ই হয়।", এবং "পদ্ধতি / অপারেটরগুলির কোনও ব্যবহার নেই যে একটি শক্তিতে একটি সংখ্যা বাড়িয়ে তুলতে পারে ", expঅনুমোদিত নয়।
mbomb007

5

পাইথন - 62 বাইট

x=v=input()
exec"x*=(2.*v+x*x*x)/(v+2*x*x*x or 1);"*99;print x

সম্পূর্ণ ভাসমান পয়েন্ট যথার্থতার মূল্যায়ন করে। ব্যবহৃত পদ্ধতি হ্যালির পদ্ধতি । যেহেতু প্রতিটি পুনরাবৃত্তি শেষের চেয়ে 3 গুণ বেশি সঠিক অঙ্ক তৈরি করে, 99 পুনরাবৃত্তিগুলি ওভারকিলের কিছুটা বেশি।

ইনপুট আউটপুট:

27 -> 3.0
64 -> 4.0
1 -> 1.0
18.609625 -> 2.65
3652264 -> 154.0
0.001 -> 0.1
7 -> 1.91293118277
0 -> 1.57772181044e-30
-2 -> -1.25992104989

কিভাবে কাজ করে?
justhalf

1
@ অ্যাডেজাল্ফ আমি মনে করি এটিই মূলত নিউটনের আনুমানিক পদ্ধতি method
yo

বিটিডব্লিউ, ব্যর্থ0
yo '

ব্যর্থ -2, তার জন্য দুঃখিত।
ইয়ো

3
@plg সমস্যার বিবরণটি কোনও ক্ষতিকারক ক্রিয়াকলাপ ব্যবহার নিষিদ্ধ করেছে, অন্যথায় v**(1/.3)এটি নিশ্চিত বিজয়ী হবে।
primo

3

জাভাস্ক্রিপ্ট (55)

function f(n){for(i=x=99;i--;)x=(2*x+n/x/x)/3;return x}

বোনাস, সমস্ত শিকড়ের জন্য সাধারণ গঠন ulation
function f(n,p){for(i=x=99;i--;)x=x-(x-n/Math.pow(x,p-1))/p;return x}

কিউব রুটের জন্য, কেবল f(n,3)স্কোয়ার রুট f(n,2)ইত্যাদি ব্যবহার করুন ... উদাহরণ: f(1024,10)রিটার্ন 2


নিউটন পদ্ধতির উপর ভিত্তি করে ব্যাখ্যা :

সন্ধান করুন: f(x) = x^3 - n = 0সমাধানটি হ'ল n = x^3
ডেরাইভেশন:f'(x) = 3*x^2

পরিমিত:
x(i+1) = x(i) - f(x(i))/f'(x(i)) = x(i) + (2/3)*x + (1/3)*n/x^2

টেস্ট

[27,64,1,18.609625,3652264,0.001,7].forEach(function(n){console.log(n + ' (' + -n + ') => ' + f(n) + ' ('+ f(-n) +')')})

27 (-27) => 3 (-3)
64 (-64) => 4 (-4)
1 (-1) => 1 (-1)
18.609625 (-18.609625) => 2.65 (-2.65)
3652264 (-3652264) => 154 (-154)
0.001 (-0.001) => 0.09999999999999999 (-0.09999999999999999)
7 (-7) => 1.912931182772389 (-1.912931182772389) 

একটি চরিত্র সংক্ষিপ্ত:function f(n){for(i=x=99;i--;)x-=(x-n/x/x)/3;return x}
অনুলিপি

47 বাইটে হ্রাস করা যেতে পারেf=(n)=>eval('for(i=x=99;i--;)x=(2*x+n/x/x)/3')
লুইস ফেলিপ দে জেসুস মুনোজ

2

পিএইচপি - 81 বাইট

আইট্রেটিভ সমাধান:

$i=0;while(($y=abs($x=$argv[1]))-$i*$i*$i>1e-4)$i+=1e-5;@print $y/$x*round($i,4);

যদি এটি শূন্যের কিউব মূল গণনা করার চেষ্টা করে তবে কী হবে?
ভিক্টর স্টাফুসা

এটি কেবল "0" আউটপুট দেবে (ত্রুটি দমন অপারেটরকে ধন্যবাদ - "@")
রাজ্জওয়ান

1
0.0001দ্বারা 1e-4এবং 0.00001দ্বারা প্রতিস্থাপন করা যেতে পারে 1e.5
কমফ্রিচ

ফলে প্রয়োজন পিএইচপি <7 ( 0/0দেয় NANপিএইচপি 7)। $i=0;অপ্রয়োজনীয় (-5 বাইট। এটি যদি না হয় forতবে একটি বাইট সংরক্ষণ করতে পারে)) এর পরে স্থানটি printপ্রয়োজন হয় না (-1 বাইট)। -Rসঙ্গে 3 বাইট সংরক্ষণ করতে পারেন $argn
তিতাস

while(1e-4+$i*$i*$i<$y=abs($x=$argn))(-2 বাইট) দিয়ে একজোড়া প্যারান্থেসি সংরক্ষণ করুন ।
তিতাস

2

পার্ল, 92 বাইট

sub a{$x=1;while($d=($x-$_[0]/$x/$x)/3,abs$d>1e-9){$x-=$d}$_=sprintf'%.4f',$x;s/\.?0*$//;$_}
  • ফাংশনটি aঅপ্রয়োজনীয় ভগ্নাংশ বা ডান প্রান্তে তুচ্ছ শূন্য ছাড়াই সংখ্যার সাথে একটি স্ট্রিং প্রদান করে।

ফলাফল:

              27 --> 3
             -27 --> -3
              64 --> 4
             -64 --> -4
               1 --> 1
              -1 --> -1
       18.609625 --> 2.65
      -18.609625 --> -2.65
         3652264 --> 154
        -3652264 --> -154
           0.001 --> 0.1
          -0.001 --> -0.1
               7 --> 1.9129
              -7 --> -1.9129
 0.0000000000002 --> 0.0001
-0.0000000000002 --> -0.0001
               0 --> 0
              -0 --> 0

দ্বারা উত্পন্ন

sub test{
    my $a = shift;
    printf "%16s --> %s\n", $a, a($a);
    printf "%16s --> %s\n", "-$a", a(-$a);
}
test 27;
test 64;
test 1;
test 18.609625;
test 3652264;
test 0.001;
test 7;
test "0.0000000000002";
test 0;

গণনাটি নিউটনের পদ্ধতির উপর ভিত্তি করে :

হিসাব


2

এপিএল - 31

(×X)×+/1,(×\99⍴(⍟|X←⎕)÷3)÷×\⍳99

এই সত্যটি ব্যবহার করে cbrt(x)=e^(ln(x)/3), তবে নিষ্পাপ ক্ষয়ক্ষতির পরিবর্তে , এটি e^xটেলর / ম্যাক্লাউরিন সিরিজ ব্যবহার করে গণনা করে।

নমুনা রান:

⎕: 27
3
⎕: 64
4
⎕: 1
1
⎕: 18.609625
2.65
⎕: 3652264
154
⎕: 0.001
0.1
⎕: 7
1.912931183
⎕: ¯27
¯3
⎕: ¯7
¯1.912931183

১ characters টি অক্ষরে একটি জে জবাব আছে এমনটি দেখে , এপিএলে আমার অবশ্যই ভয়ঙ্কর হতে হবে ...


2

জাভা, 207 182 181

কখনও কখনও আমি যখন গল্ফ খেলি তখন আমার দুটি আরও বিয়ার থাকে এবং সত্যিই খারাপ লাগে

class n{public static void main(String[]a){double d=Double.valueOf(a[0]);double i=d;for(int j=0;j<99;j++)i=(d/(i*i)+(2.0*i))/3.0;System.out.println((double)Math.round(i*1e4)/1e4);}}

আইট্রেটিভ নিউটনের আনুমানিক পদ্ধতি পদ্ধতি, 99 টি পুনরাবৃত্তি চালায়।

এখানে অসমাপ্ত:

class n{
    public static void main(String a[]){
        //assuming the input value is the first parameter of the input
        //arguments as a String, get the Double value of it
        double d=Double.valueOf(a[0]);
        //Newton's method needs a guess at a starting point for the 
        //iterative approximation, there are much better ways at 
        //going about this, but this is by far the simplest. Given
        //the nature of the problem, it should suffice fine with 99 iterations
        double i=d;

        //make successive better approximations, do it 99 times
        for(int j=0;j<99;j++){
            i=( (d/(i*i)) + (2.0*i) ) / 3.0;
        }
        //print out the answer to standard out
        //also need to round off the double to meet the requirements
        //of the problem.  Short and sweet method of rounding:
        System.out.println( (double)Math.round(i*10000.0) / 10000.0 );
    }
}

1
আপনি 6 টি অক্ষর হ্রাস করে argsএমন কিছুতে পরিবর্তনশীলটির নাম পরিবর্তন করতে পারেন z। আপনি 3 অক্ষর হ্রাস করে, লুপটির শরীরে স্থান এবং কোঁকড়া ধনুর্বন্ধনী সরিয়ে ফেলতে পারেন। আপনি 6 টি অক্ষর হ্রাস 10000.0দ্বারা প্রতিস্থাপন করতে পারেন 1e4। শ্রেণীর সর্বজনীন হওয়ার দরকার নেই, তাই আপনি আরও 7 টি অক্ষর হ্রাস করতে পারেন। এইভাবে এটি 185 টি অক্ষরে কমে যাবে।
ভিক্টর স্টাফুসা

শেষের কাস্টটি কি আসলেই প্রয়োজনীয়? এটা আমার জন্য না।
ভিক্টর স্টাফুসা

@ ভিক্টর ভাল চোখের জন্য ধন্যবাদ, 10000.0 ডাবল এর জন্য ই সংকেত ব্যবহার একটি দর্শনীয়ভাবে ভাল ধারণা ছিল। প্রশ্নের নকশা দ্বারা, আমি মনে করি এটি কার্যকর ক্রাইম ক্লাসের পরিবর্তে একটি পদ্ধতি তৈরি করা বৈধতাযুক্ত, যা আকারটি যথেষ্ট পরিমাণে হ্রাস করবে। জাভা সহ, আমি মনে করি না যে আমার কোনও সুযোগ আছে, তাই আমি কার্যকরী দিক থেকে ভুল করেছিলাম।
md_rasler

কোডগল্ফ স্বাগতম! এটি কীভাবে কাজ করে তার একটি উত্তর-উত্তর যুক্ত করতে ভুলবেন না!
জাস্টিন

@ কুইনকুনস, ধন্যবাদ, প্রস্তাবিত পরিবর্তন করেছেন।
md_rasler

2

টিআই-বেসিক, 26 24 বাইট

Input :1:For(I,1,9:2Ans/3+X/(3AnsAns:End

এটি সরাসরি ^অপারেটর ব্যবহার করে , তা নয়। এটি নিয়ম দ্বারা নিষিদ্ধ
mniip

@ এমনিপ: e^টিআই -৩৩ সিরিজের একক অপারেটর কি ? মনে নেই। যেভাবেই হোক না কেন, এটি নিয়মের চেতনা লঙ্ঘন করছে।
যান্ত্রিক শামুক

পছন্দ করুন বেশিরভাগ ভাষায় আপনি কেবলমাত্র করতে পারেন exp(ln(x)/3)বা e^(ln(x/3))আপনি যদি এই দুটির কোনওরই অনুমতি দেন। তবে আমি কোনওভাবেই বিধি দ্বারা অনুমোদিত হওয়ার exp(ln(x)/a)সমতুল্য হিসাবে বুঝতে পারি x^(1/a): - /
yo

সূচকীয় ফাংশন: "একটি ফাংশন যার মানটি একটি ধ্রুবককে আর্গুমেন্টের শক্তিতে উত্থাপিত হয় , বিশেষত ফাংশন যেখানে ধ্রুবক ই হয়।" ... "কোনও বিদ্যুতে একটি সংখ্যা বাড়িয়ে তুলতে পারে এমন পদ্ধতি / অপারেটরগুলির ব্যবহার নেই"
mbomb007

@ Mbomb007 ক্যাচের জন্য ধন্যবাদ, আমি এই উত্তরটি 3 বছরেরও বেশি আগে লিখেছি এবং এখনই এটি মেনে চলার জন্য এটি ঠিক করব।
টিমটেক

2

জে 57 বাইট

f=(x)=>eval('for(w=0;w**3<1e12*x;w++);x<0?-f(-x):w/1e4')

f=(x)=>eval('for(w=0;w**3<1e12*x;w++);x<0?-f(-x):w/1e4')
document.getElementById('div').innerHTML += f(-27) + '<br>'
document.getElementById('div').innerHTML += f(-64) + '<br>'
document.getElementById('div').innerHTML += f(-1) + '<br>'
document.getElementById('div').innerHTML += f(-18.609625) + '<br>'
document.getElementById('div').innerHTML += f(-3652264) + '<br>'
document.getElementById('div').innerHTML += f(-0.001) + '<br>'
document.getElementById('div').innerHTML += f(-7) + '<br><hr>'
document.getElementById('div').innerHTML += f(27) + '<br>'
document.getElementById('div').innerHTML += f(64) + '<br>'
document.getElementById('div').innerHTML += f(1) + '<br>'
document.getElementById('div').innerHTML += f(18.609625) + '<br>'
document.getElementById('div').innerHTML += f(3652264) + '<br>'
document.getElementById('div').innerHTML += f(0.001) + '<br>'
document.getElementById('div').innerHTML += f(7) + '<br>'
<div id="div"></div>


2

জাভাস্ক্রিপ্ট: 73/72 অক্ষর

এই অ্যালগরিদম খোঁড়া, এবং এই প্রশ্নটি দশমিক বিন্দুর পরে 4 অঙ্কের মধ্যে সীমাবদ্ধ তা কাজে লাগায়। এটি প্রশ্নটির পুনরায় কাজ করার উদ্দেশ্যে স্যান্ডবক্সে প্রস্তাবিত অ্যালগরিদমের পরিবর্তিত সংস্করণ। এটি শূন্য থেকে অসীমের মধ্যে গণনা করা হয় h*h*h<a, কেবলমাত্র 4 টি দশমিক অঙ্কগুলিকে পরিচালনা করার জন্য একটি গুণ এবং বিভাগের কৌশল দ্বারা।

function g(a){if(a<0)return-g(-a);for(h=0;h*h*h<1e12*a;h++);return h/1e4}

সম্পাদনা করুন, 4 বছর পরে: লুইস ফিলিপ ডি জেসুস মুনোজ পরামর্শ দিয়েছিলেন, **কোডটি ব্যবহার করে সংক্ষিপ্ত, তবে আমি যখন এই উত্তরটি লিখেছিলাম তখন এই বৈশিষ্ট্যটি 2014 সালে ফিরে পাওয়া যায়নি। যাইহোক, এটি ব্যবহার করে আমরা একটি অতিরিক্ত অক্ষর শেভ করি:

function g(a){if(a<0)return-g(-a);for(h=0;h**3<1e12*a;h++);return h/1e4}

1
পরিবর্তে h*h*hআপনি করতে h**3এবং 1 বাইট সংরক্ষণ করতে পারেন
লুইস ফিলিপ দে জেসুস মুনোজ

@LuisfelipeDejesusMunoz এই উত্তরটি 2014. থেকে **অপারেটর 2015 প্রস্তাব করা হয় এবং 2016 সুতরাং এর নাম ECMAScript 7 অংশ হিসেবে স্বীকার করা হয়েছে, সময় যে আমি যে লিখেছে এ, কোন ছিল **ভাষায়।
ভিক্টর স্টাফুসা

1

জাভাস্ক্রিপ্ট - 157 টি অক্ষর

এই ফাংশন:

  • নেতিবাচক সংখ্যাগুলি পরিচালনা করুন
  • ভাসমান-পয়েন্টিং নম্বরগুলি পরিচালনা করুন।
  • যে কোনও ইনপুট সংখ্যার জন্য দ্রুত কার্যকর করুন।
  • জাভাস্ক্রিপ্ট ভাসমান-পয়েন্ট সংখ্যাগুলির জন্য সর্বাধিক নির্ভুলতার অনুমতি রয়েছে।
function f(a){if(p=q=a<=1)return a<0?-f(-a):a==0|a==1?a:1/f(1/a);for(v=u=1;v*v*v<a;v*=2);while(u!=p|v!=q){p=u;q=v;k=(u+v)/2;if(k*k*k>a)v=k;else u=k}return u}

অগল্ফড ব্যাখ্যা করা সংস্করণ:

function f(a) {
  if (p = q = a <= 1) return a < 0 ? -f(-a)      // if a < 0, it is the negative of the positive cube root.
                           : a == 0 | a == 1 ? a // if a is 0 or 1, its cube root is too.
                           : 1 / f (1 / a);      // if a < 1 (and a > 0) invert the number and return the inverse of the result.

  // Now, we only need to handle positive numbers > 1.

  // Start u and v with 1, and double v until it becomes a power of 2 greater than the given number.
  for (v = u = 1; v * v * v < a; v *= 2);

  // Bisects the u-v interval iteratively while u or v are changing, which means that we still did not reached the precision limit.
  // Use p and q to keep track of the last values of u and v so we are able to detect the change.
  while (u != p | v != q) {
    p = u;
    q = v;
    k = (u + v) / 2;
    if (k * k * k > a)
      v=k;
    else
      u=k
  }

  // At this point u <= cbrt(a) and v >= cbrt(a) and they are the closest that is possible to the true result that is possible using javascript-floating point precision.
  // If u == v then we have an exact cube root.
  // Return u because if u != v, u < cbrt(a), i.e. it is rounded towards zero.
  return u
}

1

পিএইচপি, 61

নিউটনের পদ্ধতির ভিত্তিতে। মাইকেল এর উত্তরের সামান্য পরিবর্তিত সংস্করণ :

for($i=$x=1;$i++<99;)$x=(2*$x+$n/$x/$x)/3;echo round($x,14);

এটি নেতিবাচক সংখ্যার সাথে কাজ করে, ভাসমান পয়েন্ট সংখ্যাগুলি পরিচালনা করতে পারে এবং দশমিক পয়েন্টের পরে ফলাফলটি 4 টি করে গোল করে যদি ফলাফলটি একটি ভাসমান পয়েন্ট সংখ্যা হয়।

ওয়ার্কিং ডেমো


আপনি এর সাথে দুটি বাইট সংরক্ষণ করতে পারেন for($x=1;++$i<100;)...। তবে ইনপুট হিসাবে পূর্বনির্ধারিত ভেরিয়েবলগুলি ব্যবহার করা সাধারণত নকল হয় । ভাল ব্যবহার $argv[1]বা $argn
তিতাস

1

বেফঞ্জ 98 - কাজ চলছে

এই ভাষা ভাসমান পয়েন্ট সংখ্যা সমর্থন করে না; এটি তাদের অনুকরণ করার চেষ্টা করে। এটি বর্তমানে ধনাত্মক সংখ্যার জন্য কাজ করে 0যা দশমিক পয়েন্ট (বেশিরভাগ) পরে শুরু হয় না । তবে এটি কেবল 2 দশমিক জায়গায় আউটপুট দেয়।

&5ka5k*&+00pv
:::**00g`!jv>1+
/.'.,aa*%.@>1-:aa*

দশমিক বিন্দুর আগে অংশটি ইনপুট করে এটি দ্বারা গুণিত করে 100000, পরে বিন্দুর পরে অংশটি ইনপুট করে এবং দুটি সংখ্যা একসাথে যুক্ত করে এটি কাজ করে। দ্বিতীয় রেখাটি ইনপুটড সংখ্যার চেয়ে কিউব বেশি না হওয়া পর্যন্ত একটি কাউন্টার করে। তারপরে তৃতীয় লাইন পূর্ণসংখ্যা থেকে দশমিক সংখ্যা বের করে।

যদি কেউ আমাকে বলতে পারেন যে কেন তৃতীয় লাইনটি কেবল 100সঠিক মানগুলি পেতে বিভক্ত হয় তবে দয়া করে আমাকে বলুন।

iOS:

27.0       3 .0
64.0       4 .0
1.0        1 .0
18.609625  2 .65
0.001      0 .1
7.0        1 .91

0.1        0 .1

1

স্মলটালক, 37

ক্রেডিট অ্যালগরিদমের জন্য এমনিআইপ যায়; তার কোডের স্মলটাক সংস্করণ:

ইন ইনপুট; এক্স এ আউটপুট:

1to:(x:=99)do:[:i|x:=2*x+(n/x/x)/3.0]

বা, একটি ব্লক হিসাবে

[:n|1to:(x:=99)do:[:i|x:=2*x+(n/x/x)/3.0].x]

1

গেমমেকার ল্যাঙ্গুয়েজ, 51 বাইট

for(i=x=1;i++<99;1)x=(2*x+argument0/x/x)/3;return x

0

হাস্কেল: 99 সি

চালাকি করে @ এমনিপকে মারতে পারবেন না। আমি সবেমাত্র একটি বাইনারি অনুসন্ধানে গিয়েছিলাম।

c x=d 0 x x
d l h x
 |abs(x-c)<=t=m
 |c < x=d m h x
 |True=d l m x
 where m=(l+h)/2;c=m*m*m;t=1e-4

Ungolfed:

-- just calls the helper function below
cubeRoot x = cubeRoot' 0 x x

cubeRoot' lo hi x
    | abs(x-c) <= tol = mid           -- if our guess is within the tolerance, accept it
    | c < x = cubeRoot' mid hi x      -- shot too low, narrow our search space to upper end
    | otherwise = cubeRoot' lo mid x  -- shot too high, narrow search space to lower end
    where
        mid = (lo+hi)/2
        cubed = mid*mid*mid
        tol = 0.0001

প্রতিটি কলের জন্য বাইট সংরক্ষণ করতে আপনি d(পছন্দ মতো (l#h)x) ইনফিক্স অপারেটর ব্যবহার করতে পারেন । cতারপর হয়ে যায় id>>=(0#)
এএসলং ফলমূল

আপনি আশেপাশের স্থানগুলি সরাতে পারেন c < x
এএসলং ফলমূল

আপনি 1>0পরিবর্তে ব্যবহার করতে পারেন True
Esslanging ফল

0

জে 28

*@[*(3%~+:@]+(%*~@]))^:_&|&1

নিউটোন পদ্ধতি ব্যবহার করে, x^3 - Xআপডেটের ধাপের মূলটি হ'ল এক্সটি x - (x^3 - C)/(3*x^2)বর্তমান অনুমান এবং সি ইনপুট। এই একটিতে গণিত করা হাস্যকরভাবে সহজ প্রকাশ পায় (2*x+C/x^2) /3। নেতিবাচক সংখ্যাগুলির জন্য যত্ন নিতে হবে।

ডান থেকে বামে জেতে প্রয়োগ করা হয়েছে:

  1. | উভয় আর্গুমেন্টের অ্যাবস নিন, এগুলি পাস করুন
  2. ^:_ একীকরণ পর্যন্ত না
  3. (%*~@])হয় C / x^2( *~ yসমতূল্য y * y)
  4. +:@] হয় 2 x
  5. 3%~তিন দ্বারা বিভক্ত। এটি ইতিবাচক মূল দেয়
  6. *@[ * positive_root সি এর সংকেত দিয়ে ধনাত্মক মূলকে গুণ করে

পরীক্ষা রান:

   NB. give it a name:
   c=: *@[*(3%~+:@]+(%*~@]))^:_&|&1
   c 27 64 1 18.609625 3652264 0.001 7
3 4 1 2.65 154 0.1 1.91293

0

এডাব্লুকে, 53 বাইট

{for(n=x=$1;y-x;){y=x;x=(2*x+n/x/x)/3}printf"%.4g",y}

ব্যবহারের উদাহরণ:

$ awk '{for(n=x=$1;y-x;){y=x;x=(2*x+n/x/x)/3}printf"%.4g",y}' <<< 18.609625 
2.65$

এটি JavaScriptথেকে উদ্ভূত সমাধানটির জন্য @ মিগকে ধন্যবাদ । এটি আশ্চর্যজনকভাবে দ্রুত সঞ্চালিত হয় যে forলুপটির পরিবর্তন বন্ধ করতে পুনরাবৃত্তির প্রয়োজন।



0

স্ট্যাক্স , 10 বাইট সিপি 437

╘♀┘A╕äO¶∩'

চালান এবং অনলাইন ডিবাগ!

ব্যাখ্যা

ব্যাখ্যার জন্য আনপ্যাক করা সংস্করণ ব্যবহার করে।

gpJux*_+h4je
gp              Iterate until a fixed point is found, output the fix point
  Ju            Inverse of square
    x*          Multiplied by input
      _+h       Average of the value computed by last command and the value at current iteration
         4je    Round to 4 decimal digits

0

জাভা সমাধান

সর্বজনীন বিগডিসিমাল কিউবরুট (বিগডিসিমাল সংখ্যা) {

    if(number == null || number.intValue() == 0) return BigDecimal.ZERO;
    BigDecimal absNum = number.abs();
    BigDecimal t;
    BigDecimal root =  absNum.divide(BigDecimal.valueOf(3), MathContext.DECIMAL128);


    do {

        t = root;
        root = root.multiply(BigDecimal.valueOf(2))
                .add(absNum.divide(root.multiply(root), MathContext.DECIMAL128))
                .divide(BigDecimal.valueOf(3), MathContext.DECIMAL128);

    } while (t.toBigInteger().subtract(root.toBigInteger()).intValue() != 0);

    return root.multiply(number.divide(absNum), MathContext.DECIMAL128);
}

1
পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি কোড-গল্ফ চ্যালেঞ্জ, যার অর্থ লক্ষ্যটি হ'ল চ্যালেঞ্জটি সমাধান করা যতটা সম্ভব কম কোড (উত্স ফাইলের বাইটে গণনা করা)। আপনার সেই লক্ষ্যটির দিকে সমাধান সমাধানের দিকে কিছু প্রচেষ্টা দেখানো উচিত এবং আপনার উত্তরে বাইট গণনাটি অন্তর্ভুক্ত করা উচিত।
মার্টিন এন্ডার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.