سؤال

ولقد ضرب على هذه المشكلة عن ما إذا كان استخدام bignums في اللغة بصفتي نوع البيانات الافتراضي عندما يكون هناك أرقام المعنية. لقد قيمت هذا بنفسي وخفضه إلى الراحة والمتعة مقابل -question الأداء. والجواب على هذا السؤال يتوقف عن مدى ضخامة ضرب الأداء في البرامج التي لا تحصل الأمثل.

وكيف الصغيرة والنفقات العامة من استخدام bignums في الأماكن التي يكون فيها fixnum أو عدد صحيح من شأنه ان تكف؟ كيف الصغيرة يمكن أن تكون على أفضل تطبيقات؟ أي نوع من تطبيقات الوصول إلى أصغر النفقات العامة وأي نوع من المفاضلات الإضافية التي لا ينتج عنها؟

ما هو نوع من الضرب يمكن أن أتوقع أن النتائج في الأداء اللغوي العام إذا أنا وضعت لغتي للتقصير في bignums؟

هل كانت مفيدة؟

المحلول

لنكون صادقين، وأفضل الجواب "انها محاولة ونرى".

ومن الواضح bignums لا يمكن أن تكون فعالة بقدر أنواع الأم، الذي يلائم عادة في سجل CPU واحد، ولكن كل تطبيق مختلفة - إذا كان لك لا تفعل حمولة كاملة من الحساب عدد صحيح ثم النفقات العامة يمكن أن تكون ضئيلة

نصائح أخرى

ويمكنك ربما ننظر في كيفية اللثغة يفعل ذلك. انها لن تفعل دائما تقريبا <م> بالضبط الحق شيء وضمنا تحويل أنواع كما أن تصبح ضرورية. لديها fixnums (أعداد صحيحة "العادية")، bignums، نسب (خفض كسور المناسبة ممثلة في مجموعة من عددين) والعوامات (في أحجام مختلفة). يطفو وحدها التي تعاني الخطأ الدقة، وأنها معدية، أي مرة واحدة ينطوي على حساب تعويم، والنتيجة هي تعويم أيضا. "اللثغة العملي المشترك" لديها وصفا جيدا لهذا السلوك.

وإذا أمعنا التفكير في الأمر ... أنا لا أعتقد أنه سيكون لديك الكثير من الأداء يضرب على الإطلاق.

ولأن bignums بحكم طبيعتها، سيكون له <م> جدا قاعدة واسعة، ويقول قاعدة من 65536 أو أكبر والتي عادة ما تكون أقصى قيمة ممكنة للfixnum التقليدية والأعداد الصحيحة.

وأنا لا أعرف كيف كبيرة لك سيشكل قاعدة bignum ليكون ولكن إذا قمت بتعيين أنه كبير بما فيه الكفاية بما فيه الكفاية بحيث عندما يتم استخدامها في مكان fixnums و / أو الأعداد الصحيحة، فإنه لن يتجاوز الأول من أرقام bignum لها وبالتالي فإن العملية ستكون متطابقة تقريبا لfixnums العادي / كثافة العمليات.

وهذا يفتح فرصة للتحسينات التي لbignum التي لا تنمو على أول أرقام bignum لها، هل يمكن استبدالها عملية bignum من رقم واحد über بين سريع.

وبعد ذلك التحول إلى خوارزميات أرقام ن عند الحاجة إلى أرقام bignum الثاني.

ويمكن تنفيذ هذا مع العلم قليلا، وعملية التحقق على جميع العمليات الحسابية، والتفكير تقريبا، هل يمكن استخدام بت أعلى النظام، للدلالة على bignum، إذا كتلة البيانات لديها مجموعة بت أعلى النظام إلى 0، ثم معالجتها كما لو كانت طبيعية fixnum / [إينتس] ولكن إذا تم تعيينه إلى 1، ثم توزيع كتلة كهيكل bignum واستخدام خوارزميات bignum من هناك.

وهذا يجب تجنب أداء يضرب من المتغيرات مكرر حلقة بسيطة وهو ما أعتقد أنه أول مصدر محتمل من الزيارات الأداء.

وانها مجرد تفكيري الخام على الرغم من اقتراح لأنك يجب أن تعرف أفضل مني: -)

وp.s. آسف، نسيت ما كانت المصطلحات التقنية من bignum أرقام وbignum قاعدة

وخفض الخاص بك هو الصحيح، ولكن الاختيار يعتمد على خصائص الأداء من اللغة الخاصة بك، والتي <م> لا يمكننا ان نعرف !

وبمجرد أن لغتك تنفيذها، يمكنك قياس الفارق في الأداء، وربما تقديم مبرمج توجيها لاختيار الافتراضي

وأنت لن نعرف أبدا ضرب الأداء الفعلي حتى إنشاء المؤشر الخاص بك كما سوف تختلف النتائج لكل لغة، في مراجعة اللغة وفي وحدة المعالجة المركزية و. ليس هناك لغة طريقة مستقلة لقياس هذا باستثناء حقيقة واضحة أن عدد صحيح 32BIT ويستخدم مرتين ذكرى صحيح 16BIT.

<اقتباس فقرة>   

وكيف الصغيرة والنفقات العامة من استخدام bignums في الأماكن التي يكون فيها fixnum أو عدد صحيح من شأنه ان تكف؟ مشاهدة صغيرة يمكن أن تكون على أفضل تطبيقات؟

والأنباء السيئة هي أنه حتى في أفضل تنفيذ برنامج ممكن، BigNum سيكون أبطأ من علم الحساب مدمج من حيث الحجم (كل شيء أي من العوامل 10 إلى عامل 1000).

وليس لدي أرقام دقيقة لكنني لا أعتقد أن العدد الدقيق يساعد كثيرا في مثل هذه الحالة: إذا كنت بحاجة إلى أعداد كبيرة، واستخدامها. إن لم يكن، لا. إذا كانت لغتك يستخدم بشكل افتراضي (اللغة التي يفعل؟ بعض اللغات الديناميكية تفعل ...)، والتفكير ما إذا كان يتم تعويض الحرمان من التحول إلى لغة أخرى لمن مكاسب في الأداء (التي يجب أن نادرا ما يكون).

و(التي يمكن تقريبا أن تترجم إلى: هناك فرق كبير ولكن يجب أن لا يهم <م> إذا (وفقط إذا) لا يهم، استخدام لغة أخرى لأنه حتى مع أفضل تنفيذ ممكن، هذا. اللغة الواضح ليست مناسبة تماما للقيام بهذه المهمة.)

وأشك تماما أنه سيكون من يستحق ذلك، إلا إذا كانت غاية نطاق معين.

وأول ما يتبادر إلى الذهن هي كل على قليلا لحلقات جميع برامج ، أو هي المتغيرات مكرر قليلا عن سيصبح bignums؟ هذا مخيف!

ولكن إذا كانت لغتك الوظيفية بدلا ... ثم ربما لا.

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