I am trying to understand the TMD based on this doc.
As per my understanding,
For transcendental functions i..e (log2 log10 1oge, exp,sin, cos,tan...) the exact value for an input cannot be computed.
So assume y = f(x) where f - transcendental function. We will always compute the approximation to f which is y".
Furthermore, the document defines Table Maker's dilemma as follows,
Does one obtain the rounding of f(x) by **rounding y" ? **
Not Always possible if y has the following form:
- in rounding to nearest mode
- in rounding towards 0,+infinity, -infinity modes
This problem is called Table Maker's Dilemma (TMD)
So my confusion is
- what does it mean by an exact value ?
- if f(x) exact value cannot be computed, how can you say that rounding of f(x)?
- I cannot understand how does approximation to f(x) - y" is computed , no mention of approximation?
- what does it mean by rounding of f(x) should be equivalent to rounding of y" (approximation)
- how does the point 3 is negated when y=f(x) is very close to exact number?
Can you please explain what exactly the problem is ?
As far as I can tell, the table-maker's dilemma as described in the sources listed in the comments Wikipedia Table-Maker's dilemma and Intro to TMD refers to computing in advance, given the IEEE rounding mode (nearest, truncate, floor, ceiling), the operation to be performed, and the range of arguments, the greatest number of significant figures
n
in order to ensurem
bits of accuracy.Pretend we have a function
f
and a floating-point scalarx
.y = f(x)
is not guaranteed to be a dyadic rational with a small enough denominator to be exactly represented by a floating point number, so instead we calculate $y^*$, which is accurate tom
binary places. $y^*$ has a relative error of $2^{-m}$, so we really have an interval $[\;(1-y^*2^{-m})\;y^*,\space(1+y^*2^{-m})\;y^*\;]$.We can divide the real line into disjoint, contiguous intervals that each round to a particular floating point number. The question is then, how do we pick an
m
in advance such that, for each interval we get by applyingf
to a floating-point scalarx
, every value in that interval rounds to the same floating point number withn
significant figures.