Command Palette

Search for a command to run...

محول IEEE 754: تعرف على كيفية تخزين العوامات حقًا

محول IEEE 754: تعرف على كيفية تخزين العوامات حقًا

T
Toolz Team
|Aug 23, 2026|16 دقيقة قراءة

جزء من مجموعة ثنائي وسداسية

المرة الأولى أ 0.1 + 0.2 === 0.3 لقد عضني Bug في الإنتاج، وفعلت ما يفعله معظم المطورين: لقد بحثت ووجدت واقتبست؛ النقطة العائمة غريبة، واقتبست؛ وانتقلت. لقد مرت سنوات قبل أن أنظر فعليًا إلى الأجزاء وأفهم السبب. بمجرد أن فعلت ذلك، توقفت فئة كاملة من الأخطاء الرقمية عن الغموض. يمشي هذا الدليل عبر ما يعرضه لك محول IEEE 754، باستخدام محول IEEE 754 على Toolz.dev، ولماذا يعد التحديق في العلامة والأس والجزء العشري أسرع طريقة لبناء حدس حقيقي حول كيفية تخزين أجهزة الكمبيوتر للكسور العشرية.

ليرة تركية؛DR: تقوم أجهزة الكمبيوتر بتخزين أرقام الفاصلة العائمة كإشارة، وقوة اثنين، ودلالة كسرية، وفقًا لمعيار IEEE 754. يقوم محول IEEE 754 بتشفير رقم عشري مثل 3.14159 إلى تلك البتات الدقيقة ويفك تشفير البتات مرة أخرى إلى قيمة. محول IEEE 754 يقوم بالأمرين معًا، للحصول على دقة مفردة ومزدوجة، بالكامل في متصفحك، مع كسر العلامة والأس والجزء العشري.

ما هو IEEE 754؟

IEEE 754 هو المعيار، تم نشره لأول مرة في عام 1985 وتم تنقيحه ليصبح IEEE 754-2019، يحدد كيفية تمثيل أجهزة الكمبيوتر لأرقام الفاصلة العائمة في النظام الثنائي. تتبعها تقريبًا كل وحدة المعالجة المركزية ووحدة معالجة الرسومات ولغة البرمجة، ولهذا السبب أ double يتصرف بنفس الطريقة في C وJava وPython وJavaScript. عندما يقول الناس &quot؛ النقطة العائمة، &quot؛ فهي تعني دائمًا تقريبًا النقطة العائمة الثنائية IEEE 754.

الفكرة الأساسية هي أن الرقم يتم تخزينه في ثلاثة أجزاء. هناك بت إشارة تقول موجب أو سالب. هناك أس يقيس القيمة بقوة اثنين. وهناك جزء عشري، يُسمى أيضًا الكسر أو الدلالة، يحمل الأرقام الدقيقة. مجتمعة، الرقم العادي هو علامة ضرب 1.mantissa ضرب 2 للأس. وهو تدوين علمي، في الأساس الثاني، معبأ في عدد ثابت من البتات.

التنسيقان اللذان تقابلهما يوميًا هما دقة مفردة، تسمى binary32، ودقة مزدوجة، تسمى binary64. يستخدم الفردي بتة إشارة واحدة، و8 بتات أسية، و23 بتة عشري، بإجمالي 32 بت. يستخدم Double بتة إشارة واحدة، و11 بت أس، و52 بتة عشري، بإجمالي 64 بت. Double هو نوع الفاصلة العائمة الافتراضي في معظم اللغات؛ يعد المفرد شائعًا في وحدات معالجة الرسومات وفي التعليمات البرمجية الحساسة للذاكرة.

ماذا يفعل محول IEEE 754 بالفعل؟

يأخذ محول IEEE 754 رقمًا ويعرض لك نمط البت الخاص به بالضبط، مقسمًا إلى تلك الحقول الثلاثة، جنبًا إلى جنب مع النموذج السداسي العشري والقيمة المقروءة من البتات. وهو يعمل في كلا الاتجاهين: أدخل رقمًا عشريًا لتشفيره، أو الصق نمط بت ثنائي أو سداسي لفك تشفيره مرة أخرى إلى الرقم الذي يمثله.

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

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

لماذا 0.1 زائد 0.2 لا يساوي 0.3؟

هذا هو المثال الأساسي، والمحول يجعله ملموسًا. لا يمكن تمثيل القيمة 0.1 تمامًا في الفاصلة العائمة الثنائية، لنفس السبب لا يمكن كتابة 1/3 بالنظام العشري تمامًا. في الأساس العاشر، 1/3 هو 0.3333... إلى الأبد. في الأساس الثاني، 0.1 هو كسر متكرر لا ينتهي أبدًا، لذلك يجب تقريبه ليناسب 52 بتة من الجزء العشري.

قم بفك تشفير المضاعفة لـ 0.1 والقيمة التي تحملها البتات فعليًا هي 0.100000000000055111151231257827021181583404541015625. المضاعفة لـ 0.2 هي بالمثل شعرة كبيرة جدًا. أضف القيمتين المستديرتين والنتيجة أقل قليلاً من 0.3، لكن المضاعفة لـ 0.3 أقل قليلاً، لذا فإن الاثنين ليسا متساويين. لا شيء مكسور. كل خطوة تفعل بالضبط ما يتطلبه IEEE 754، ويتيح لك المحول مشاهدة حدوث ذلك بدلاً من أخذه على الإيمان.

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

ما هي العلامة والأس والعشري؟

كل حقل له مهمة محددة، ويقوم المحول بتسمية الثلاثة.

بت الإشارة هو الأبسط: 0 يعني موجب، 1 يعني سالب. نظرًا لأن الإشارة عبارة عن بتة منفصلة، فإن IEEE 754 يحتوي على صفر موجب وسالب، وهما يتصرفان بالتساوي في المقارنات ولكنهما يحملان بتات مختلفة.

يقوم حقل الأس بتخزين قوة اثنين، ولكن مع إضافة انحياز حتى يتمكن من تمثيل الأسس السالبة بدون إشارة منفصلة. الانحياز هو 127 للدقة الفردية و1023 للدقة المزدوجة. لذا فإن حقل الأس المخزن البالغ 127 بدقة واحدة يعني الأس الفعلي للصفر. يُظهر محول Toolz.dev كلا الرقمين: القيمة المتحيزة التي تعيش في البتات، والقوة غير المتحيزة للاثنين التي يطبقها بالفعل. يؤدي هذا التمييز إلى رفع عدد كبير من الأشخاص، ولهذا السبب توضحه الأداة بدلاً من جعلك تطرحه في رأسك.

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

إليك كيفية ترتيب التنسيقين حقلًا تلو الآخر

ملكية مفردة (ثنائية 32) مزدوج (ثنائي64)
مجموع البتات 32 64
بت التوقيع 1 1
بت الأس 8 11
بتات العشري 23 52
التحيز الأس 127 1023
تقريبًا. أرقام عشرية 7 15 إلى 16
اسم شائع يطفو مزدوج

كيف يمكنني تحويل البتات مرة أخرى إلى رقم عشري؟

يعد فك التشفير مفيدًا تمامًا مثل التشفير، وهو الطريقة التي تقرأ بها قيمة من تفريغ الذاكرة، أو تنسيق ملف ثنائي، أو بروتوكول شبكة يقوم بتخزين العوامات الأولية. اضبط نوع الإدخال على Hex أو Binary والصق نمط البت الدقيق الذي تتوقعه الدقة: 8 أرقام سداسية أو 32 بت للمفرد، أو 16 رقمًا سداسيًا أو 64 بت للمضاعفة.

على سبيل المثال، السداسي أحادي الدقة 40490FDB فك التشفير إلى 3.1415927، أقرب تعويم إلى pi. يقبل المحول أيضًا خيارًا اختياريًا 0x البادئة وتتجاهل المسافات والشرطات السفلية، حتى تتمكن من لصق البايتات المجمعة أثناء العثور عليها. إذا أعطيتها عددًا خاطئًا من الأرقام، فإنها تخبرك بالضبط بعدد الأرقام التي تحتاجها الدقة بدلاً من اقتطاعها بصمت، وهو نوع رسالة الخطأ التي أتمنى أن تكلف المزيد من الأدوات عناء كتابتها.

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

كيف يتم تمثيل اللانهاية وNaN والصفر؟

القيم الخاصة هي المكان الذي يصبح فيه IEEE 754 ذكيًا، ويحدد المحول كل حالة لك حتى لا تضطر إلى حفظ الأنماط.

يعمل حقل الأس كمفتاح. عندما تكون كل بتة أسية هي 1، فأنت في النطاق الخاص: الجزء العشري الصفري يعني اللانهاية، وأي جزء عشري غير صفري يعني NaN، وليس رقمًا. تختلف اللانهاية الموجبة والسالبة فقط بت الإشارة. NaN هو ما تحصل عليه من عمليات مثل صفر مقسومًا على صفر أو الجذر التربيعي لسالب، وله خاصية مشهورة وهي أنه لا يساوي نفسه.

عندما تكون كل بتة أس 0، فأنت في النطاق الخاص الآخر: الجزء العشري الصفري بالكامل هو صفر، موجب أو سالب اعتمادًا على بت الإشارة، والجزء العشري غير الصفري هو رقم دون طبيعي. تملأ العناصر دون الطبيعية الفجوة بين الصفر وأصغر رقم عادي، وتداول الدقة للقدرة على تمثيل مقادير صغيرة جدًا. يستخدمون الأس الفعال لواحد ناقص التحيز، ويسقطون الرقم البادئ الضمني 1، والذي يمثله المحول عندما يُظهر الأس غير المتحيز.

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

متى أحتاج هذا فعلا؟

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

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

ما هي حدود دقة الفاصلة العائمة؟

بمجرد أن تتمكن من رؤية البتات، تتوقف حدود التنسيق عن كونها مجردة. يحتوي المضاعف على 52 بتة من الجزء العشري المخزن بالإضافة إلى الرقم البادئ الضمني 1، والذي يصل إلى ما يقرب من 15 إلى 16 رقمًا عشريًا مهمًا. ادفع إلى ما بعد ذلك وتتبخر الدقة بهدوء. أكبر عدد صحيح يمكن أن يمثله المزدوج مع كل قيمة بينهما لا تزال دقيقة هو 2 أس 53، وهو 9007199254740992. أضف واحدًا إلى ذلك وستنتقل النتيجة مرة أخرى، لأن القيمة التالية القابلة للتمثيل تبعد اثنين، وليس واحدًا. ولهذا السبب تكشف اللغات التي تستخدم الزوجي لجميع الأرقام، ومن بينها JavaScript، عن a Number.MAX_SAFE_INTEGER ثابت عند هذه القيمة بالضبط، ولماذا يمكن أن تتلف معرفات قاعدة البيانات الكبيرة المرسلة كأرقام JSON بصمت.

تسمى الفجوة بين قيمة واحدة قابلة للتمثيل والقيمة التالية بوحدة في المكان الأخير، أو ULP، وتنمو مع نمو الحجم. بالقرب من 1.0 الفجوة صغيرة؛ ما يقرب من مليار هو بضع مئات؛ بالقرب من الحد الأقصى المزدوج، حوالي 1.8 مرة 10 إلى 308، تكون الفجوة بين الجيران كبيرة فلكيًا. يجعل المحول هذا مرئيًا: قم بتشفير رقمين كبيرين قريبين وستجد غالبًا أنهما يشتركان في نفس البتات، لأنه ببساطة لا يوجد تمثيل بينهما. فهم ULP هو ما يمنعك من توقع دقة أكبر مما يمكن أن يقدمه التنسيق.

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

الوجبات السريعة العملية متسقة. لا تخزن الأموال كتعويم؛ استخدم عددًا صحيحًا من السنتات أو النوع العشري، لأن قيمة مثل 0.10 لا يمكن تمثيلها تمامًا وتتفاقم الأخطاء عبر آلاف المعاملات. لا تقارن العوامات بالمساواة التامة؛ قارن ضمن حجم التسامح بمشكلتك. وعندما يتعين على عدد صحيح كبير جدًا أن يبقى على قيد الحياة ذهابًا وإيابًا، احتفظ به كسلسلة أو استخدم نوعًا صحيحًا عشوائي الدقة بدلاً من الثقة في المضاعفة للاحتفاظ به. من الأسهل تذكر كل قاعدة من هذه القواعد بمجرد أن يوضح لك المحول سبب تصرف التنسيق بالطريقة التي يتصرف بها.

الأسئلة المتداولة

كيف يمكنني تحويل رقم عشري إلى IEEE 754؟

اختر دقة مفردة أو مزدوجة، واحتفظ بنوع الإدخال على العلامة العشرية، واكتب رقمك، وقم بالتحويل. تقوم الأداة بتشفير القيمة إلى نمط IEEE 754 بت الخاص بها وتظهر بت الإشارة وحقل الأس والجزء العشري والثنائي الكامل والرقم السداسي العشري. كل ذلك يعمل في متصفحك.

ما الفرق بين الدقة الفردية والمزدوجة؟

تستخدم الدقة الفردية (ثنائي 32) 32 بت: علامة واحدة، و8 أس، و23 جزء عشري، مما يعطي حوالي 7 أرقام عشرية من الدقة. تستخدم الدقة المزدوجة (ثنائي 64) 64 بت: علامة واحدة، و11 أسًا، و52 جزءًا عشريًا، مما يعطي حوالي 15 إلى 16 رقمًا. Double هو النوع العائم الافتراضي في معظم اللغات؛ يعد المفرد أمرًا شائعًا في وحدات معالجة الرسومات وفي التعليمات البرمجية المقيدة بالذاكرة.

لماذا لا يتم تحويل 0.1 إلى قيمة محددة؟

0.1 ليس له تمثيل محدود في النقطة العائمة الثنائية، تمامًا كما أن 1/3 ليس له عدد عشري محدود. أقرب مزدوج قابل للتمثيل هو 0.10000000000055111151231257827021181583404541015625. يُظهر المحول القيمة المخزنة التي تُقرأ مرة أخرى من البتات، لذا يمكنك رؤية الفرق الصغير الذي يسبب مفاجآت التقريب مثل 0.1 + 0.2 لا يساوي 0.3.

ما هي العلامة والأس والعشري؟

بت الإشارة هو 0 للإيجاب و1 للسالب. يقوم حقل الأس بتخزين قوة اثنين مع إضافة انحياز (127 للمفرد، 1023 للمضاعفة)، ولهذا السبب تعرض الأداة كلاً من القيمة المتحيزة في البتات والقوة غير المتحيزة التي تطبقها. يحتوي الجزء العشري على الجزء الكسري من الدلالة، مع وجود رقم بادئ ضمني 1 للأرقام العادية.

هل يمكنني تحويل IEEE 754 بت مرة أخرى إلى رقم عشري؟

نعم. اضبط نوع الإدخال على Hex أو Binary والصق نمط البت الدقيق: 8 أرقام سداسية أو 32 بت للدقة الفردية، أو 16 رقمًا سداسيًا أو 64 بت للدقة المزدوجة. تقوم الأداة بفك تشفيرها وإظهار القيمة العشرية التي تمثلها مع تقسيم الحقل بالكامل.

كيف يتم تمثيل اللانهاية وNaN والصفر؟

عندما تكون كل بتة أسية 1، فإن الجزء العشري الصفري يعني اللانهاية والجزء العشري غير الصفري يعني NaN. عندما تكون كل بتة أسية 0، يكون الجزء العشري الصفري صفرًا (إيجابيًا أو سالبًا اعتمادًا على بت الإشارة) والجزء العشري غير الصفري هو رقم دون طبيعي. يقوم المحول بتسمية كل حالة من هذه الحالات لك.

هل من الآمن استخدام هذه الأداة للأرقام الحساسة؟

نعم. يتم تشغيل التحويل بالكامل بلغة JavaScript في متصفحك. لا يحمل أي طلب شبكة مدخلاتك، ولا يتم تخزين أي شيء، وتعمل الأداة دون اتصال بالإنترنت بمجرد تحميل الصفحة، لذا فإن أي قيمة تدخلها تظل على جهازك.

ما هو التنسيق السداسي الذي يتوقعه المحول؟

أرقام سداسية عشرية عادية، مع بادئة 0x اختيارية ومسافات أو شرطات سفلية للتجميع، والتي يتم تجاهلها. تتوقع الدقة الفردية 8 أرقام سداسية وتتوقع الدقة المزدوجة 16. على سبيل المثال، 40490FDB هو pi أحادي الدقة (3.1415927).


استكشف الأجزاء بنفسك مجانًا محول IEEE 754. يقوم بتشفير وفك تشفير عوامات الدقة الفردية والمزدوجة بالكامل في متصفحك، دون تحميل أي شيء.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!