Tag Info

Hot answers tagged

42

Control the Precision and Accuracy of Numerical Results This is an excellent question. Of course everyone could claim highest accuracy for her product. To deal with this situation there exist benchmarks to test for accuracy. One such benchmark is from NIST. This specific benchmark deals with the accuracy of statistical software for instance. The NIST ...


21

UpArrow[a_, n_Integer] := Nest[a^# &, 1, n] then UpArrow[4, 3] or 4 \[UpArrow] 3 To complete this method you may wish to add an input alias: AppendTo[CurrentValue[$FrontEndSession, InputAliases], "up" -> "\[UpArrow]"]; Now EscupEsc will enter \[UpArrow]. Change $FrontEndSession to $FrontEnd and run it only once to make the change ...


19

Stan Wagon presents a little utility function in his book Mathematica in Action called IntegerChop[]. Here's a slightly wrinkled version: IntegerChop = With[{r = Round[#]}, r + Chop[# - r]] &; You might wish to do comparisons yourself (the computer I am using does not have Mathematica). Here are some benchmarks: Do[roundif /@ testdata, {10000}]; ...


15

Here is a definition for mixedForm that works for all cases, i.e. proper and improper fractions and integers. Clear[mixedForm] mixedForm[Rational[x_, y_]] := If[Abs@x > y, HoldForm[#1 + #2/y], x/y] & @@ (Sign@x QuotientRemainder[Abs@x, y]) mixedForm[x_Integer] := x Some examples: mixedForm /@ {2, 4/5, 10/3, -3/4, -5/2} Out[1]= {2, 4/5, 3 + ...


13

One way is to plot the function 0 against a log axis. LogLogPlot[0, {t, 1, 12}, Axes -> {True, False}, Ticks -> {Range[12]}] or, changing the numbers LogLogPlot[0, {t, 64, 96}, Axes -> {True, False}, Ticks -> {Range[64, 96]}] The Axis function turns off the vertical axis (because you just want the number line) and the Ticks specifies ...


12

IntegerDigits works Try powers = IntegerDigits[204, 2] {1, 1, 0, 0, 1, 1, 0, 0} Now, if you want that formatted as a sum of powers of two, you have to hold it. For example Total@MapIndexed[#1 Defer[2]^(First@#2 - 1) &, Reverse@powers] 2^2 + 2^3 + 2^6 + 2^7 EDIT Nicer code, given that your numbers go up to 255 pow2[num_]:=Inner[#1 ...


11

Thanks to Nasser M. Abbasi i found a way. To change the Display. The function that you can provide for any ~Legend via LegendFunction wraps the complete ~Legend[] into anything. And he mentioned, that NumberForm encapsulates the numbers. So why not replace them (delayed)? Version 1: Scientific Notation at every Label Hence choosing f[x_] := x /. ...


10

The function converting strings to integer is FromDigits. It is the counterpart of IntegerString and both functions can be used with whatever basis you like. Therefore, if you want to convert from base 16 you do FromDigits["6b", 16]


10

EDIT As Chris pointed out Floor used this way fails for cases where the value is slightly less than a whole number, whereas Round works. I shall edit the remainder of my answer to correct this oversight. If you are using x == 0 you shouldn't need Chop since it is already making a numeric comparison: If[# - Round[#] == 0, Round[#], #] & Or simply: ...


10

You are losing hugely due to a base 10 implementation. Integers are manipulated in base 2 in Mathematica. So you would want a base 2 variant to get any reasonable behavior. Here is one way to code it. There might be tweaks that improve it. fastSquare[a_] := Catch[Module[ {len = BitLength[a], len2, hi, lo, h2, l2, hl}, If[len < 100, Throw[a^2]]; ...


8

My original answer is incorrect -- it is preserved as a record of my own hubris. :^) Simply, as Rojo points out, the calculation is still being done with 1*^1000, it's just being done at a different time. One may see this by manually observing the time taken for evaluation on an idle machine, or by setting this option which will print the total time taken ...


8

Some of the above don't work in some cases due to machine approximation, e.g. x = 6250*0.292 1825. If[# - ⌊#⌋ == 0, Round@#, #] &[x] 1825. Chop[# - ⌊#⌋] + ⌊#⌋ &[x] 1825. IntegerPart@# + Chop@FractionalPart@# &[x] 1825. But Stan Wagon's method works: With[{r = Round[#]}, r + Chop[# - r]] &[x] 1825


8

I'm surprised there isn't a question about this (i.e. entering numbers in scientific notation) already. To enter $3\times10^{-3}$, you can write 3*^-3. For further reference, see Input Syntax: Numbers.


7

I like this for readability: roundif = IntegerPart@# + Chop@FractionalPart@# & It's also listable and fairly fast.


7

Ok, if you want it faster still, and your close to integer numbers are machine-size integers - here are two equivalent implementations - in Mathematica compiled to C, and Java. It is an interesting problem to compare performance, we will observe that Java code is speed-equivalent to C code here, modulo small extra time needed for data transfer. The idea is ...


7

Another solution based on FractionalPart and IntegerPart would be : Fraction[x_Rational]:= Function[{z, y}, If[z!=0, HoldForm[z + y], HoldForm[y]], {HoldAll}] @@ {IntegerPart[x], FractionalPart[x]} Fraction[x_Integer] := x This approach produces slightly different results than R.M.'s solution : Fraction /@ {2, 4/5, 10/3, ...


7

There is a tolerance Internal`$EqualTolerance that is applied when testing Real numbers. If the numbers agree up to the last Internal`$EqualTolerance digits, then they are treated as equal. Try this: eps = 1.0; p = 0; Block[{Internal`$EqualTolerance = 0.}, While[(1.0 + eps) > 1.0, eps = eps/2.0; p += 1]; ] eps p eps*2 (* 1.11022*10^-16 53 ...


7

Here's a more general variant a(↑...↑)b with any given number of up-arrows, as defined on MathWorld: (* Short-hand for single arrow. *) UpArrow[a_, b_] := UpArrow[1][a, b]; (* Trivial case of a(↑...↑)1. *) UpArrow[_][a_, 1] := a; (* Single arrow: exponentation. *) UpArrow[1][a_, b_] := a^b; (* Generic case: do a recursion. *) UpArrow[n_Integer][a_, ...


7

From FromDigits>>Details: For example: N@FromDigits[RealDigits[123.55555]] (* 123.556 *)


6

This isn't directly an answer, and I'll delete it if it is off target. But you might want to use some non-System` context functionality for taking polynomial-mod-2 products. Specifically this works with integer lists of coefficients. I'll show an example below. In[1110]:= SeedRandom[1111]; vals = RandomInteger[2^8 - 1, 2] intlists = ...


6

Using the function from the notebook here: ImproperForm[x_] := Function[{z, y}, HoldForm[z + y], {HoldAll}] @@ {Floor[x],x - Floor[x]} Usage: In[12]:= ImproperForm[10/7] Out[12]= 1+3/7


5

This should work with any real, rationalizing it (so, it becomes an approximate result)... The integer part of a negative number is considered the floor of the number. I'm not sure what's desired in those cases... ClearAll[MixedForm]; Format[MixedForm[r_?NumericQ]] := Module[{rat = If[Element[r, Rationals], r,Rationalize[N@r, 0]], x, y}, {x, y} = ...


5

Here is an attempt to implement both formatting for entire expressions and basic arithmetic. EDIT: fixed according to Artes' solution. ClearAll[mixedForm] Format[mixedForm[x : Except[_Rational]]] := x /. q_Rational :> mixedForm[q] Format[mixedForm[q_Rational]] ^:= Interpretation[ If[Abs[q] < 1, q, HoldForm[# + #2] & @@ {IntegerPart@q, ...


5

stringToHex[str_] := ToExpression["16^^" <> str]; This is just a way of automating the normal notation you would use, which is 16^^6b (check here for the documentation).


5

Well, you may know that they're hexadecimal numbers, but Mathematica doesn't since you didn't tell it. When you enter hexList = {12, 10, 6b, 3f, 92} you'll notice that the "b" and the "f" are in blue, while the numbers are black. Also notice a small space between "6" and "b", and between "3" and "f". The blue means they're undefined symbols. Mathematica ...


5

You may use for example: pr[n_] := NumberForm[n, Infinity, ExponentFunction -> (Null &)] so that: pr[1.52522*10^7] (* 15252200. *)


5

I have faced this problem earlier but failed attempts with simple operations based on NumberForm, Round.. have forced me to stop looking for general solution. I have thought my skills in MMA were too low, but also today I am not able to do this in simple way. (haven't I learned anything? :)) This form of expression uncertainty in measurement is described ...


5

And another way: logLine[min_, max_] := Module[{lines, labels}, lines = Line[{{Log[#], -1}, {Log[#], 1}}] & /@ Range[min, max]; labels = Text[#, {Log[#], 1.7}] & /@ Range[min, max]; Graphics[{ labels, Line[{{Log[min], 0}, {Log[max], 0}}], lines }, AspectRatio -> 1/10 ] ] We have then that logLine[1,12] yields ...


4

Are you perhaps looking for AlgebraicNumberPolynomial? AlgebraicNumberPolynomial[AlgebraicNumber[1/2 (1 + Sqrt[5]), {-3, 2}], HoldForm[q]] -3 + 2 q The question states: "... show algebraic numbers" and "I would like to view ..." If you would like to display the AlgebraicNumber expression this way but retain its full syntax you can use a formatting ...


4

First, you can use Style: Style[ Plot[Sin[x], {x, 0, 10}, PlotRange -> Automatic, Frame -> True, Axes -> False, AspectRatio -> 1/GoldenRatio, ImageSize -> 600, Frame -> True, FrameTicks -> Automatic, LabelStyle -> Directive[FontFamily -> "Calibri", FontSize -> 12]], NumberPoint -> ","] Second, you can set it ...



Only top voted, non community-wiki answers of a minimum length are eligible