إضافة أرقام من أعداد صحيحة كبيرة في بوويرشيل

StackOverflow https://stackoverflow.com/questions/604223

  •  03-07-2019
  •  | 
  •  

سؤال

عند إضافة أرقام من رقم في بوويرشيل، كل شيء على ما يرام مع الأعداد الصحيحة التي يكون طول -le 29.

$largeInteger = 11111111111111111111111111111 #29 digits sums correctly
$sumDigits = 0
$largeInteger
while ($largeInteger -ne 0)
{
    $sumDigits += $largeInteger  % 10
    $largeInteger  = [MATH]::Floor($largeInteger /10)   
}

$sumDigits

والامور مثيرة للاهتمام عندما يكون طول عدد -gt 29. وفي الحالة التي يكون فيها طول هو 30، ومجموع = 77.

وأي أفكار؟

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

المحلول

وسيكون لديك لتثبيت مكتبة bignum. هناك بعض المؤشرات هنا . إما أن أو استخدام المنصة التي لديها bignums بنيت فيها

نصائح أخرى

وأن يكون لديك أكثر من جوا ضعف ما يتم التعامل معها كحالة خاصة من قبل بوويرشيل. كنت قد تحاول $largeInteger = [float]111111111111111111111111111111. سوف لا تزال تفقد بعض الدقة باستخدام تعويم.

لمزيد من المعلومات، انظر تعويم (C # المرجعي)

وتغيير largeInteger من 29 1 الى 30 1 تغيرات نوع المتغير من عشري إلى مضاعفة. استخدام $ largeInteger.GetType () لمعرفة ذلك.

والرياضيات في الخوارزمية لا تعمل بشكل جيد جدا على الزوجي. تشغيل خطوط 2 في حلقة مرارا وتكرارا على موجه لرؤية القيم في كل خطوة.

وعندما يذهب largeInteger من العشرية لمضاعفة، والحساب ليست دقيقة أي أكثر من ذلك. وهذا هو السبب في أنني اقترح runnning خطوط 2 على موجه.

وهنا هو الإخراج - منتديات PS C:> $ largeInteger٪ [مزدوجة] 10
8
PS C:> $ largeInteger٪ [مزدوجة] 100
88
PS C:> $ largeInteger٪ [مزدوجة] 1000000000000000000
1.11105501764518E + 17
PS C:> $ largeInteger٪ [مزدوجة] 1000000000000000000000
1.11111105501765E + 20
PS C:> $ largeInteger٪ [مزدوجة] 1000000000000000000000000000
1.11111111111104E + 26
PS C:> $ largeInteger٪ [مزدوجة] 100000000000000000000000000000
1.11111111111111E + 28
PS C:> $ largeInteger٪ [مزدوجة] 1000000000000000000000000000000
1.11111111111111E + 29

ويمكنك مشاهدة التشويه الذي يحدث نتيجة لتمثيل غير دقيق الداخلي للضعف الذي لا يمكن تمثيلها بدقة في ثنائي. كما يزيد من المقسوم دقة ما تبقى زيادة يحسن أيضا.

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