سؤال

لماذا ناتج دريسولت غير صالح؟
ENV: Visual Studio 2008

int _tmain(int argc, _TCHAR* argv[])  
{  
   double dN = - 0.091023604111478473 ;  
   double dD = 0.127777777777777;  
   double dResult =  pow( dN,dD );   
   //dResult = -1.#IND000000000000  
   return 0;  
}   
هل كانت مفيدة؟

المحلول

نرى http://www.cplusplus.com/reference/clibrary/cmath/pow/

double pow (double base, double exponent );

"إذا كانت القاعدة سالبة ولم تكن الأسعار قيمة متكاملة ، أو إذا كانت القاعدة صفرًا وكان الأساسي سلبيًا ، فسيحدث خطأ في المجال ، مع تعيين Errno المتغير العالمي على القيمة Edom."

نصائح أخرى

إذا كانت قيمة DD الخاصة بك هي 0.25 بدلاً من الكسر الذي قدمته ، فيمكنك أن ترى أنه يأخذ حقًا الجذر الرابع بدلاً من الأسي من الرقم السلبي. الكسر الخاص بك قريب من الجذر الثامن. تحتاج إلى أرقام معقدة للتعبير عن الإجابة التي يجب أن تعطيها الوظيفة.

هذه هي النتيجة المتوقعة لأن DN سلبية. نتيجة POW (DN ، DD) ؛ يتم تعريفه فقط إذا كان DN إيجابيًا أو إذا كان DD صحيحًا. خلاف ذلك ، والنتيجة هي رقم معقد. على سبيل المثال ، لن يعمل POW (-1. ، 0.5) أيضًا.

حسنًا ، 0.127777777 هو ما هو رقم؟ لها مثل 1277777777/(10 .... 0)

1277777777777 ليس رقمًا متساويًا ، وبالتالي فإن SMT إلى قوة 12777777777 هو رقم سالب ، و 10 ... الجذر 0 من هذا ليس رقمًا حقيقيًا.

أنا أعود إلى حقيقة أن^(b/c) = (جذر c-th من) (a^b)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top