package Ġcom . ree va js . ree va . m fb t . impl Ċ Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . max Ċ Ċ private Ġconst Ġval ĠCHAR S Ġ= Ġ" 0 1 2 3 4 5 6 7 8 9 abcdefgh ijkl mnopqrst uvw xyz " Ċ Ċ // Ġv 8 / src / numbers / conversions . cc ĠDouble To Rad ix CString Ġ( as Ġof Ġcommit Ġbb 7 8 e 6 2 8 1 0 3 9 8 7 4 d 7 2 b 9 f 5 2 6 0 8 b 8 fbc 6 9 5 1 6 0 da 4 ) Ċ // ĠSee ĠLICENSE - V 8 Ċ fun Ġradix Dto a ( value _: ĠDouble , Ġradix : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġvalue Ġ= Ġvalue _ ĊĊĠĠĠ Ġexpect ( radix Ġin Ġ 2 .. 3 6 ) ĊĠĠĠ Ġexpect ( radix Ġ!= Ġ 1 0 ) ĊĊĠĠĠ Ġval Ġbuffer Ġ= ĠChar Array ( 2 2 0 0 ) ĊĠĠĠ Ġvar Ġinteger Cursor Ġ= Ġbuffer . size Ġ/ Ġ 2 ĊĠĠĠ Ġvar Ġfraction Cursor Ġ= Ġinteger Cursor ĊĠĠĠ Ġval Ġnegative Ġ= Ġvalue Ġ< Ġ 0 . 0 ĊĠĠĠ Ġif Ġ( negative ) ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ- value ĊĊĠĠĠ Ġvar Ġinteger Ġ= Ġfloor ( value ) ĊĠĠĠ Ġvar Ġfraction Ġ= Ġvalue Ġ- Ġinteger ĊĠĠĠ Ġvar Ġdelta Ġ= Ġmax ( ED o uble ( 0 . 0 ). next Double (), Ġ( 0 . 5 Ġ* Ġ( ED o uble ( value ). next Double () Ġ- Ġvalue ))) ĊĠĠĠ Ġexpect ( delta Ġ>= Ġ 0 . 0 ) ĊĊĠĠĠ Ġif Ġ( fraction Ġ>= Ġdelta ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ fraction Cursor ++] Ġ= Ġ'.' ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ*= Ġradix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Ġ*= Ġradix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigit Ġ= Ġfraction . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ fraction Cursor ++] Ġ= ĠCHAR S [ digit ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ-= Ġdigit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ> Ġ 0 . 5 Ġ|| Ġ( fraction Ġ== Ġ 0 . 5 Ġ&& Ġ( digit Ġand Ġ 1 ) Ġ!= Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ+ Ġdelta Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Cursor -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fraction Cursor Ġ== Ġbuffer . size Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ('. ' Ġ== Ġbuffer [ fraction Cursor ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteger Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġbuffer [ fraction Cursor ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigit Ġ= Ġif Ġ( c Ġ> Ġ' 9 ') Ġc Ġ- Ġ' a ' Ġ+ Ġ 1 0 Ġelse Ġc Ġ- Ġ' 0 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( digit Ġ+ Ġ 1 Ġ< Ġradix ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ fraction Cursor ++] Ġ= ĠCHAR S [ digit Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( fraction Ġ>= Ġdelta ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhile Ġ( ED o uble ( integer Ġ/ Ġradix . toDouble ()). exponent () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinteger Ġ/= Ġradix ĊĠĠĠĠĠĠĠ Ġbuffer [ -- integer Cursor ] Ġ= Ġ' 0 ' ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremainder Ġ= Ġinteger Ġ% Ġradix ĊĠĠĠĠĠĠĠ Ġexpect ( floor ( remainder ) Ġ== Ġremainder ) ĊĠĠĠĠĠĠĠ Ġbuffer [ -- integer Cursor ] Ġ= ĠCHAR S [ remainder . toInt ()] ĊĠĠĠĠĠĠĠ Ġinteger Ġ= Ġ( integer Ġ- Ġremainder ) Ġ/ Ġradix ĊĠĠĠ Ġ} Ġwhile Ġ( integer Ġ> Ġ 0 ) ĊĊĠĠĠ Ġif Ġ( negative ) ĊĠĠĠĠĠĠĠ Ġbuffer [ -- integer Cursor ] Ġ= Ġ'-' ĊĊĠĠĠ Ġreturn Ġbuffer . slice ( integer Cursor Ġuntil Ġfraction Cursor ). join ToString ( separator Ġ= Ġ"") Ċ } Ċ