اذهب إلى المحتوى
  • 0

صفر عند حساب قوى 2 الكبيرة في مكتبة NumPy

Ail Ahmed

السؤال

السلام عليكم

ده المسائل من موقع codewars

Complete the function that takes a non-negative integer n as input, and returns a list of all the powers of 2 with the exponent ranging from 0 to n ( inclusive ).

وده الكود بتاعي

import numpy as np 

def power_of_two(n):
    
    if n >= 0:
        arenge = np.arange(0 , n+1)
        power_two = np.power(2 , arenge)    
        return list(power_two)
        

print(power_of_two(100))   

ام بظغط علي TEST كل صح تمام هنا مفيش مشكله 

المشكله بقا ام بظغط علي ATTEMPT بيظهر مشكله انا مش فهم سببها اي مع ان انا شيف ان الكود كويس جدا

هو ليه ام رقم n يكون كبير بيظهر في النتجيه البرنامج اصفر في اخر المضفوف

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

وعليكم السلام ورحمة الله وبركاته.

نحن هنا لا نقوم بالاجابة على اسئلة الاختبارات ولكن يمكننى اعطائك نصائح لتستطيع حل المشكلة بنفسك.

الكود الخاص بك لا يوجد به اى مشاكل وهو جيد جيدا . لذلك هل يمكنك ارسال رسالة الخطأ التى تظهر لك ؟

وايضا قم بكتابة الكود دون استخدام مكتبة numpy وحاول مرة اخرى وانظر هل يتم حل المشكلة ام لا .

بالتوفيق لك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ الآن قال محمد_عاطف:

وعليكم السلام ورحمة الله وبركاته.

نحن هنا لا نقوم بالاجابة على اسئلة الاختبارات ولكن يمكننى اعطائك نصائح لتستطيع حل المشكلة بنفسك.

الكود الخاص بك لا يوجد به اى مشاكل وهو جيد جيدا . لذلك هل يمكنك ارسال رسالة الخطأ التى تظهر لك ؟

وايضا قم بكتابة الكود دون استخدام مكتبة numpy وحاول مرة اخرى وانظر هل يتم حل المشكلة ام لا .

بالتوفيق لك

تمام شكراا لحضرتك

بتاريخ 6 دقائق مضت قال محمد_عاطف:

وايضا قم بكتابة الكود دون استخدام مكتبة numpy وحاول مرة اخرى وانظر هل يتم حل المشكلة ام لا .

 

الا المشكله هي هي 

انا اكشفت المشكله وهي انا لو الرقم المتغير n كان كبير فا بيظهر ارقام سالب وكمان اضفر فا احل المشكله ده ازي ؟

الان المفروض ما يظهرش كده 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تعتمد مكتبة NumPy على مصفوفات متجانسة لتخزين البيانات، مما يعني أن جميع العناصر في المصفوفة يجب أن تكون من نفس النوع، ونوع البيانات المُستخدم لتخزين قوى 2 هو العدد العشري ذو الدقة المزدوجة (float64).

على الرغم من أن ذلك النوع من البيانات يمكنه تمثيل أرقام كبيرة، إلا أن له دقة محدودة، مع ازدياد قيمة n، تصبح قوى 2 كبيرة جدًا لدرجة تتجاوز دقة تمثيلها كأعداد عشرية ذوات دقة مزدوجة.

وعندما تفقد الأرقام دقتها، يتم تقريبها إلى أقرب قيمة ممكنة ضمن نطاق التمثيل، ولديك يتم تقريب قوى 2 الكبيرة جدًا إلى الصفر.

إذاً، عليك استخدام نوع بيانات العدد الصحيح ذي الدقة العالية (int64) لتخزين قوى 2 إذا كانت قيمتها ضمن نطاق تمثيله، لكن أيضًا الحل أحيانًا غير مناسب لجميع الحالات، خاصةً مع قيم n كبيرة جدًا.

أنصحك بالإعتماد على مكتبة gmpy2 التي توفر دقة حسابية أعلى من مكتبة NumP وتسمح بحساب قوى 2 بدقة أكبر.

أو استخدام بايثون فقط فاللغة قادرة على تنفيذ ما تريد.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ منذ ساعة مضت قال Ail Ahmed:

انا اكشفت المشكله وهي انا لو الرقم المتغير n كان كبير فا بيظهر ارقام سالب وكمان اضفر فا احل المشكله ده ازي ؟

 

هذا الخطأ شائع فى البرمجة وهو ما يسمى overflow اى ان الذاكرة لا تستطيع ان تحمل جميع البيانات فى المتغير .

فمثلا المتغير من نوع int64 فى numby يستطيع ان يحمل ارقام من -9223372036854775808 الى 9223372036854775807 واى رقم يتجاوز هذه الارقام ستحدث مشكلة ال overflow اى فائض فان الذاكرة لا تعرف كيف تتعامل مع هذه البيانات الزائدة فتقوم بكتابة بيانات فوق البيانات الحالة فى المتغير مما يسبب ظهور ارقام سالبة او حتى رقم 0 .

وهذه مشكلة متعلقة فى numby فهى لا تستطيع ان تتحمل بيانات كثيرة عكس python فانها مرنه حيث تقوم بتغير حجم الذاكرة حتى يتناسب مع المتغير .

حيث لاحظ الفرق عند تنفيذ هذين السطرين.

print(np.power(2,100))   #0
print((2**100))   #1267650600228229401496703205376

لاحظ فى السطر الاول فان numby تقوم باراجع 0 حيث حدثت مشكلة ال oveflow لان numby لم تستطع ان تتعامل مع العدد الذى اكبر من 9223372036854775807 .

اما فى السطر الثانى فان بايثون مرنة حيث تستطيع تغير الذاكرة كما تريد لتتحمل اى قيمة للرقم .

وكما اخبرتك من البداية ان المشكلة من الممكن ان تكمن فى numby ولم الحظ ان الرقم الذى يتم الاختبار عليه كبير . ولذلك يمكنك استخدام python بدون اى مكتبة مثل هكذا .

def power_of_two(n):
    power_two = [];
    for i in range(1,n):
        power_two.append(2**i)
    return power_two    
print(power_of_two(10000))   

ستجد ان بايثون لديها القدرة على تحمل اى رقم مهما كان .

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكراا جدا لحضرتك وعلي المعلومات الجميل ده انا يعني الحمد الله بستفد كثير اوي من حضرتكم

جزاكم الله كل خير

بتاريخ 40 دقائق مضت قال محمد_عاطف:

وكما اخبرتك من البداية ان المشكلة من الممكن ان تكمن فى numby ولم الحظ ان الرقم الذى يتم الاختبار عليه كبير . ولذلك يمكنك استخدام python بدون اى مكتبة مثل هكذا .

 

انا كانت عاوز استخدم المكتبه عشان اسرع واحسن ولكن تمام استخدم لغه ذاته نفسها

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...