c# - خطوة - طريقة عمل العوامة بالبطاطا



مجموعة من الأعداد الصحيحة التي يمكن التعبير عنها على وجه التحديد كما العوامات/الزوجي (1)

ما هو المدى الدقيق للأعداد الصحيحة (المتجاورة) التي يمكن التعبير عنها على أنها مضاعفة (تعويم؟؟) السبب الذي أسأله هو لأنني غريبة عن أسئلة مثل هذا واحد عندما يحدث فقدان الدقة.

هذا هو

  1. ما هو أقل عدد صحيح موجب مثل m+1 لا يمكن التعبير عنه على وجه التحديد على أنه مضاعف (ريس. فلوت)؟
  2. ما هو أكبر عدد صحيح سلبي -n مثل -n-1 لا يمكن التعبير بدقة على أنها مزدوجة (تعويم تعويم)؟ (قد تكون هي نفسها كما سبق).

وهذا يعني أن كل عدد صحيح بين -n و m له تمثيل عائم بالضبط. أنا أساسا تبحث عن مجموعة [-n, m] لكل من العوامات والزوجين.

دعونا نحد من نطاق لمعيار إيي 754 32 بت و 64 بت التمثيلات نقطة عائمة. وأنا أعلم أن تعويم لديه 24 بت من الدقة والمزدوجة لديها 53 بت (على حد سواء مع بت الرائدة الخفية)، ولكن نظرا لتعقيدات التمثيل نقطة عائمة أنا أبحث عن إجابة موثوقة لهذا. من فضلك لا موجة يديك!

(الجواب المثالي يثبت أن جميع الأعداد الصحيحة من 0 إلى m قابلة للتعبير، وأن m+1 ليست كذلك).


وبما أنك تسأل عن أنواع النقاط العائمة في إيي، فإن اللغة لا تهم.

#include <iostream>
using namespace std;

int main(){

    float f0 = 16777215.; // 2^24 - 1
    float f1 = 16777216.; // 2^24
    float f2 = 16777217.; // 2^24 + 1

    cout << (f0 == f1) << endl;
    cout << (f1 == f2) << endl;

    double d0 = 9007199254740991.; // 2^53 - 1
    double d1 = 9007199254740992.; // 2^53
    double d2 = 9007199254740993.; // 2^53 + 1

    cout << (d0 == d1) << endl;
    cout << (d1 == d2) << endl;
}

انتاج:

0
1
0
1

وبالتالي فإن الحد لتعويم هو 2 ^ 24. والحد الأقصى للمضاعفة هو 2 ^ 53. السلبيات هي نفسها لأن الفرق الوحيد هو بت علامة.





double