Speed up a function with Element[], ToString[]?

xNull = {0, 0, 0};
sin[{i_, k_, j_}] :=
If[k > 0 && Element[i, Reals] === True, h = N[Sin[i]]; If[Element[h, Reals] === True, {h, k, ToString[“Sin(” <> j <> “)”]}, xNull], xNull];

            For[i = 1., i <= 1000000., i++, x = sin[{7.5, 3.2, "xNm"}]] // AbsoluteTiming
            x
        {7.32883, Null}
        {0.938, 3.2, "Sin(xNm)"}

How can I optimize this function, I need only draw any real number and if they are not, I must return {0,0,0}

i_ must be a real number with a precision of 16,
k_ cheh a decimal number ranging from 0.0 to 9.9 with a careful precision of one decimal number,
j_ is a text string

This may be a little faster:

Clear[sin];
sin[{i_Real, k_?Positive, j_String}] := {N[Sin[i]], k, 
   "Sin(" <> j <> ")"};
sin[_] = {0, 0, 0};

A little bit faster without the redundant N:

Clear[sin];
sin[{i_Real, k_?Positive, j_String}] := {Sin[i], k, "Sin(" <> j <> ")"};
sin[_] = {0, 0, 0};

OK thanks. you may also optimize this? thanks :slight_smile:

SumLev[k_] := N[IntegerPart[(Max[Floor[k]] + Total[ FractionalPart[k]])*10]/10, 2];

example: k = {3.2, 4.2, 1.9} = Max(3,4,1) + (0.2+0.2+0.9) = 4 + 1.3 = 5.3

This is a bit faster, but it may or may not give the exact number format that you want:

SumLev2[k_] := 
  IntegerPart[(Max[Floor[k]] + Total[FractionalPart[k]])*10]/10.;

If you work with floating-point inputs only, compilation may help with speed, but I don’t have expertise in that area.