В целом, полагаться на «точность» значения с плавающей запятой, которое является результатом вычисления, чревато опасностью.Например, следующий код:
CGFloat x1 = some_function();
CGFloat x2 = some_other_function();
if(x1 == x2)
{
// do something
}
, даже не зная, что делают функции, скорее всего неверен.Даже если функции выполняют очень похожие вычисления, оптимизатор может переупорядочивать операции, вызывая небольшие ошибки округления, достаточные для сбоя теста на равенство.
Это должно быть:
CGFloat x1 = some_function();
CGFloat x2 = some_other_function();
CGFloat tolerance = 0.1; // or some tolerance suitable for the calculation.
if(fabsf(x1 - x2) < tolerance)
{
// do something
}
, где допуск равензначение, подходящее для выполняемых вычислений.
Так что, не зная внутренних элементов CAKeyframeAnimation
, я могу сказать вам, что любой код, который ожидает точные значения, будет по своей природе "хрупким".Это не означает, что вы не сможете получить точные значения, возможно, но это будет во многом зависеть от входных данных.
Надеюсь, это поможет.