Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- In[1]:= 2^3^2^3^5^8 < 3^2^2^7^6^7
- During evaluation of In[1]:= General::ovfl: Overflow occurred in computation. >>
- During evaluation of In[1]:= General::ovfl: Overflow occurred in computation. >>
- Out[1]= Indeterminate < Indeterminate
- In[2]:= Log[Log[2]] + Log[3] 2^3^5^8 < Log[Log[3]] + Log[2] 2^7^6^7
- During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>
- During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>
- Out[2]= Overflow[] < Overflow[]
- In[3]:= WolframAlpha["2^3^2^3^5^8 < 3^2^2^7^6^7", "MathematicaForms"][[2, 1]]
- Out[3]= True
- In[4]:= WolframAlpha["2^2^5^2^7^4^9^3^7^6^9^9^9^9^3^2 < 3^3^6^3^9^4^2^3^2^2^2^2^2^3^3^3", "MathematicaForms"][[2, 1]]
- Out[4]= True
- In[5]:= WolframAlpha["4^6^8^8^9 < 3^2^3^3^3", "MathematicaForms"]
- Out[5]= {}
- In[6]:= WolframAlpha["3^3^3^3^3 < 4^4^3^3^3", "MathematicaForms"][[2, 1]]
- Out[6]= False
- ClearAll[symbolicConvert];
- SetAttributes[symbolicConvert, {HoldAll, Listable}];
- symbolicConvert[num_] := Unevaluated[num] /. Power -> power
- ClearAll[log];
- log[power[base_, exp_]] := exp * log[base];
- log[HoldPattern[Times[args__]]] := Total@Map[log, {args}];
- log[(main : (_log*_power)) + rest_] := log[main] + log[1 + rest/main];
- log[main_ + rest : log[1 + _]] := log[main] + log[1 + rest/main];
- start = symbolicConvert[2^3^2^3^5^8]
- (* power[2, power[3, power[2, power[3, power[5, 8]]]]] *)
- NestList[log, start,4]
- ClearAll[getNestingLength];
- getNestingLength[expr_power] :=
- Length[{expr /. power -> Sequence}] - 1;
- ClearAll[getMain];
- getMain[main_ + log[1 + _]] := main;
- getMain[x_ /; FreeQ[x, power]] := x;
- ClearAll[prep];
- SetAttributes[prep, HoldAll];
- prep[fst_Power, sec_Power] :=
- With[{nest = Max[getNestingLength /@ #]},
- Map[Nest[log, #, nest] &, #]] &@symbolicConvert[{fst, sec}];
- prep[2^3^2^3^5^8, 3^2^2^7^6^7]
- ClearAll[less];
- less[fst_, sec_] /; And @@ Map[
- MatchQ[#, (_ + log[1 + _]) | (x_ /; FreeQ[x, power])] &,
- {fst, sec}] && getMain[fst] =!= getMain[sec] :=
- getMain[fst] < getMain[sec] /. log -> (If[# <= 0, 0, Log[#]] &);
- less[fst : (main_ + log[1 + fr_/rmain_]), sec : (main_ + log[1 + sr_/rmain_])] :=
- less[rmain + fr, rmain + sr];
- less[a_log + b_/c_power, a_log + d_/c_power] := less[b, d];
- less @@ prep[2^3^2^3^5^8, 3^2^2^7^6^7]
- (* True *)
- less @@ prep[10^3^4^5, 3^3^4^5]
- (* False *)
- less @@ prep[2^2^5^2^7^4^9^3^7^6^9^9^9^9^3^2, 3^3^6^3^9^4^2^3^2^2^2^2^2^3^3^3]
- (* True *)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement