سؤال

في متابعة هذا السؤال, يبدو أن بعض الأرقام لا يمكن أن تكون ممثلة من قبل النقطة العائمة في كل شيء ، و بدلا من ذلك يتم تقريب.

كيف أرقام النقطة العائمة تخزينها ؟

هل هناك معيار مشترك عن أحجام مختلفة ؟

أي نوع من gotchas لا تحتاج إلى احترس إذا كنت تستخدم النقطة العائمة?

هم عبر اللغة متوافق (أي ما التحويلات هل أنا بحاجة إلى التعامل مع لإرسال النقطة العائمة عدد من الثعبان برنامج برنامج C عبر TCP/IP)?

-آدم

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

المحلول

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

إليكم بعض مشتركة gotchas:

  • أكبر هو أن ما أريد مقارنة بين أرقام النقطة العائمة من أجل المساواة (أو عدم المساواة).سوف تحتاج إلى استخدام أكثر من/أقل من المقارنات بدلا من ذلك.
  • المزيد من العمليات في النقطة العائمة رقم أهم أخطاء التقريب يمكن أن تصبح.
  • الدقة محدودة بسبب حجم الكسر ، لذلك قد لا تكون قادرة على بشكل صحيح إضافة أرقام مفصولة عدة أوامر من حجم.(على سبيل المثال ، لن تكون قادرا على إضافة 1E-30 1E30.)

نصائح أخرى

توضيح شامل من القضايا المحيطة أرقام النقطة العائمة في المادة ما كل عالم الكمبيوتر يجب أن تعرف عن حساب الفاصلة العائمة.

المعيار هو IEEE 754.

بالطبع هناك وسائل أخرى لتخزين الأرقام عندما IEE754 ليست جيدة بما فيه الكفاية.المكتبات مثل جافا BigDecimal تتوفر لمعظم منصات الخريطة جيدا SQL هو نوع الرقم.يمكن استخدام الرموز غير منطقية الأرقام و النسب لا يمكن أن يكون بدقة ممثلة في الثنائي أو العشري النقطة العائمة يمكن تخزينها على شكل نسبة.

كما أن الجزء الثاني من سؤالك ، ما لم يكن الأداء والكفاءة هامة للمشروع الخاص بك, ثم أقترح عليك نقل النقطة العائمة البيانات كسلسلة عبر TCP/IP.هذا يتيح لك تجنب القضايا مثل بايت محاذاة وسوف سهولة التصحيح.

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

في C++, قاعدة جيدة من التجربة هو أن أعتقد أن تطفو يعطيك 7 أرقام من الدقة المضاعفة يعطيك 15.أيضا إذا كنت ترغب في معرفة كيفية اختبار المساواة ، يمكنك أن تبحث في هذا سؤال الموضوع.

في متابعة هذه المسألة ، يبدو أن بعض الأرقام لا يمكن ممثلة النقطة العائمة في كل شيء ، و بدلا من ذلك يتم تقريب.

الصحيح.

كيف أرقام النقطة العائمة تخزينها ؟ هل هناك معيار مشترك عن أحجام مختلفة ؟

كما ملصقات أخرى سبق ذكرها ، على وجه الحصر تقريبا IEEE754 وخليفتها IEEE754R.غوغلينغ يعطيك ألف تفسيرات جنبا إلى جنب مع أنماط بت وشرح لهم.إذا كنت لا تزال تواجه مشاكل على ذلك ، هناك اثنين لا تزال شائعة FP صيغ:IBM DEC-VAX.بعض الباطنية آلات المجمعين (BlitzBasic, TurboPascal) هناك بعض غريبة الأشكال.

أي نوع من gotchas لا تحتاج إلى احترس إذا كنت تستخدم النقطة العائمة?هم عبر اللغة متوافق (أي ما التحويلات لا تحتاج للتعامل مع إرسال النقطة العائمة عدد من الثعبان برنامج برنامج C عبر TCP/IP)?

عمليا لا شيء يتم عبر اللغة متوافق.

النادرة جدا التي تحدث في المراوغات:

  • IEEE754 يعرف sNaNs (يشير NaNs) و qNaNs (هادئ NaNs).تلك السابقة تتسبب في فخ مما يضطر المعالج إلى استدعاء معالج الروتينية إذا تم تحميلها.هذه الأخيرة التي لا تفعل ذلك.لأن اللغة المصممين يكره إمكانية أن sNaNs يقطع سير العمل ودعم لهم إنفاذ دعم معالج الروتينية ، sNaNs هي دائما تقريبا بصمت تحويلها إلى qNaNs.لذلك لا تعتمد على 1:1 تحويل الخام.ولكن مرة أخرى:هذه هي نادرة جدا و يحدث إلا إذا NaNs موجودة.

  • يمكن أن يكون لديك مشاكل مع endianness (بايت في أمر خاطئ) إذا الملفات بين أجهزة كمبيوتر مختلفة مشتركة.فإنه يمكن اكتشافها بسهولة لأنك الحصول على NaNs على أرقام.

نعم هناك IEEE معيار ثنائي حساب الفاصلة العائمة (IEEE 754)

عدد ينقسم إلى ثلاثة أجزاء, علامة, الأس و الكسر ، عند تخزينها في الثنائية.

هذا المادة بعنوان "معيار IEEE 754 أرقام النقطة العائمة" قد تكون مفيدة.أن نكون صادقين أنا لست متأكدا تماما أنا فهم السؤال الخاص بك لذلك أنا لست متأكدا من أن هذا هو الذهاب إلى أن تكون مفيدة ولكن آمل أن يكون.

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

ما أتذكر هو 32 بت العائمة نقطة المخزنة باستخدام 24 بت عن العدد الفعلي ، و تبقى 8 بت تستخدم كقوة 10, تحديد مكان هذه النقطة العشرية.

أنا قليلا صدئ على الموضوع ثو...

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