проблема вашего кода в строках
coefficient = persistence;
persistence = persistence*persistence;
Его следует изменить на
coefficient = coefficient *persistence;
в противном случае на каждой итерации
первый коэффициент увеличивается напросто постоянство
pow(persistence, 1) ; pow(persistence, 2); pow(persistence, 3) ....
Однако вторая реализация идет
pow(persistence, 1); pow(persistence, 2); pow(persistence, 4); pow(persistence, 8) ......
, вскоре "постоянство" превысит предел для float, и вы получите нули (или неопределенное поведение) в вашем ответе.
РЕДАКТИРОВАТЬ Еще две вещи
- Накопление (реализация 2) не очень хорошая идея, особенно с действительными числами и с алгоритмами, которые требуют точности.Возможно, вы теряете небольшую часть своей информации каждый раз, когда накапливаете «постоянство» (например, из-за округления).Предпочитайте прямые вычисления (1-е внедрение), а не накопление, когда вы можете.(плюс, если бы это был Serial, реализация 2 будет легко распараллеливаемой.)
- Если вы работаете с AMD OpenCL, обратите внимание на функции pow ().У меня были проблемы с ними на нескольких машинах несколько раз.Функции, кажется, зависают иногда без причины.Просто к вашему сведению.