2012-02-24 4 views

ответ

2

Недостаточно для вас.

Есть улучшения, которые я бы рекомендовал для функции, которую вы опубликовали.

Не нужно вызывать функцию питания; x*x и y*y будут такими же хорошими и дешевыми.

Я бы защитить от округления масштабирования, как этот псевдо-код:

if (abs(x) > abs(y)) { 
    r = abs(y/x); 
    hyp = x*sqrt(1 + r*r); 
} else { 
    r = abs(x/y); 
    hyp = y*sqrt(1 + r*r); 
} 
+0

что вы имеете в виде - защитить от округления масштабирования? – SirYakalot

+0

Вы должны изучить его. Если x или y (или оба) очень велики, возведение в квадрат больших чисел и добавление их к меньшим могут привести к потере точности. У двойника всего около 18 цифр точности. Поэтому, если вы масштабируете проблему таким образом, чтобы никогда не было квадрата очень большого числа. – duffymo

Смежные вопросы