1
$\begingroup$

I have this interpolation example

zzz = Interpolation[{
    {{1}, 2`100*Pi},
    {{2}, 3`100*Pi},
    {{3}, 4`100*Pi}
    }, InterpolationOrder -> 1];
zzz[2]
zzz[2.5]
zzz[2.5`100]

and I am getting these resilts

9.424777960769379715387930149838508652591508198125317462924833776923449218858626995884104476026351204

10.9956

10.99557428756427633461925184147826009469009289781287037341230607307735742200173149519812188869740974

first number as expected with 100 digits, second with only 4 digits, but if I add `100 to the argument I can get it with 100 digits as well.

Now I use multidimensional example

testData = {
   {{-2.*10^-6, 0, -18}, -1.00853429340956742965680093076966025423734590973983188199800080460508043197286933569747093680631648*10^6},
   {{-2.*10^-6, 0, -17}, 
    952504.61044236930112440429386078472672512393090882097358420180063200222870428099604804394164585046},
   {{-2.*10^-6, 1, -18}, -1.008544941816832295575440188033483155333800668013690157106923425838109768669333223372232072904210136*10^6},
   {{-2.*10^-6, 1, -17}, -952514.6672734985329986920711230513627204920640531655413765067694156739368659196153982113188871999717},

   {{-1.78947*10^-6, 0, -18}, -1.00854109353837536345550608172429712197251598047769246281925070613484574642246277456744911673832572*10^6},
   {{-1.78947*10^-6, 0, -17}, -952511.41057117723492310944481542159446029400164668155440545170216176754315387443491802212157785970},

   {{-1.78947*10^-6, 1, -18}, -1.008551741385092646935524440345434727928230066236270646432464156954808417875408736480254883876917917*10^6},
   {{-1.78947*10^-6, 1, -17}, -952521.4668417583449142805833940440259658101867440498419481296004930320450422321944211465035742782570}
   };
ff[x1_, x2_, x3_] = Interpolation[testData, InterpolationOrder -> 1][x1, x2, x3]

and for this example, I cannot get the results with 100 digits, even if I use exact existing values

ff[-2.0`100*10`100^-6, 0.0`100, -18.0`100]
ff[-2.0`100*10`100^-6, 1.0`100, -18.0`100]

Out[350]= -1.00853*10^6
Out[351]= -1.00854*10^6

How to force interpolation to use required precision? There is no WorkingPrecision argument for interpolation.

UPDATE 1

even if I put `100 everywhere like this, it is still the same result

testData = {
   {{-2`100*10^-6, 0.0`100, -18`100}, -1.00853429340956742965680093076966025423734590973983188199800080460508043197286933569747093680631648`100*10^6},
   {{-2`100*10^-6, 0.0`100, -17`100}, 952504.61044236930112440429386078472672512393090882097358420180063200222870428099604804394164585046`100},

   {{-2`100*10^-6, 1`100, -18`100}, -1.008544941816832295575440188033483155333800668013690157106923425838109768669333223372232072904210136`100*10^6},
   {{-2`100*10^-6, 1`100, -17`100}, -952514.6672734985329986920711230513627204920640531655413765067694156739368659196153982113188871999717`100},

   {{-1.78947`100*10^-6, 0.0`100, -18`100}, -1.00854109353837536345550608172429712197251598047769246281925070613484574642246277456744911673832572`100*10^6},
   {{-1.78947`100*10^-6, 0.`100, -17`100}, -952511.41057117723492310944481542159446029400164668155440545170216176754315387443491802212157785970`100},

   {{-1.78947`100*10^-6, 1`100, -18`100}, -1.008551741385092646935524440345434727928230066236270646432464156954808417875408736480254883876917917`100*10^6},
   {{-1.78947`100*10^-6, 1`100, -17`100}, -952521.4668417583449142805833940440259658101867440498419481296004930320450422321944211465035742782570`100}
};
ff[x1_, x2_, x3_] = 
 Interpolation[testData, InterpolationOrder -> 1][x1, x2, x3]
$\endgroup$
  • 1
    $\begingroup$ You have machine precision numbers in data. I would expect the output to always be machine precision. $\endgroup$ – Michael E2 Feb 11 '18 at 23:29
  • $\begingroup$ I thought if I have a number like this -1.0085342934095674296568009307696602542373459097398318819980008 (with 100 digits after dot) it is not machine precision anymore. $\endgroup$ – Zlelik Feb 13 '18 at 19:06
  • $\begingroup$ I put `100 explicitly everywhere (in UPDATE 1) and the result is the same. $\endgroup$ – Zlelik Feb 13 '18 at 19:21
2
$\begingroup$

Evaluate 0.0`100 and you'll get a machine precision zero. Use the exact 0 instead:

fff = Interpolation[testData /. x_ /; x == 0 -> 0, InterpolationOrder -> 1];

fff[-2.`100.*^-6, 0, -18.`100.]
(*
-1.0085342934095674296568009307696602542373459097398318819980008046050\
804319728693356974709368063165*10^6
*)
$\endgroup$
  • $\begingroup$ It works, thank you, but looks like a bug. how can I remember all these tricks :) Also if I do like this ff[-2.0`100*10`100^-6, 0, -18.0] it does not work, but if I do like that ff[-2.0`100*10`100^-6, 0, -18.0`100] it works. What is the difference between 0 and -18.0? And what will happen, if I want to make a graph (Plot) of this function? Will it be full precision or again only machine precision? $\endgroup$ – Zlelik Feb 13 '18 at 22:16
  • $\begingroup$ @Zlelik Don't you mean the difference between the machine precision -18.0 and the 100-digit precision -18.0`100? Somewhere in the docs I think there's an explanation that zero cannot have a precision other than Infinity (i.e. exact) or MachinePrecision; it can have an Accuracy, though. The reason is that the precision of x is defined to be the uncertainty divided by x, and you cannot divide by x. $\endgroup$ – Michael E2 Feb 13 '18 at 22:20
  • $\begingroup$ Thank you for clarifying. But why result is different for ff[-2.0`100*10`100^-6, 0, -18.0] and ff[-2.0`100*10`100^-6, 0, -18.0`100]? $\endgroup$ – Zlelik Feb 15 '18 at 10:05
  • $\begingroup$ @Zlelik According to the tutorial Machine-Precision Numbers, when you give machine-precision input to most expressions, including InterpolatingFunction, you get machine-precision output, no matter the precision of other parts of the expression. $\endgroup$ – Michael E2 Feb 15 '18 at 12:00
  • $\begingroup$ I see. thank you for the link. What can I do to force Plot function to use full precision, but not machine precision? if I just do Plot[ff[-2.0`100*10`100^-6, 0, x], {x,-18,18}] it will use machine precision and I will get wrong graph. Will it work properly if I do like this Plot[ff[-2.0`100*10`100^-6, 0, x], {x,-18`100,18`100}]? $\endgroup$ – Zlelik Feb 16 '18 at 13:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.