سؤال

لقد وجدت للتو خطأً في بعض عمليات التلاعب بالأرقام في برنامجي وأحصل على FloatDomainError (NaN)

لذلك بدأت بتسجيل الرقم الذي تم تمريره باستخدام:

if(metric.is_a?(Numeric))
  self.metric = metric
else
  LOGGER.warn("metric #{metric} is not a number")
  self.metric=0
end

لكن الرقم الذي يتم تمريره هو NaN الذي على ما يبدو is_a?(Numeric) لأنني لا أحصل على تحذير السجل الخاص بي، ويقوم بتمرير القياس إلى طريقة metric= الخاصة بي، حيث أحصل على FloatDomainError

الآن، صحّحوني إذا كنت مخطئًا، لكن ألا يبدو من الخطأ لغويًا أن يكون لديك NaN (ليس رقما) يكون من النوع رقمي؟؟هل يمكن لأحد أن يشرح لي هذا؟

راجع للشغل باستخدام Jruby-1.4.1

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

المحلول

IEEE 754 تحدد أرقام الفاصلة العائمة -INFINITY +INFINITY وNotANumber لتجعل من الممكن التفاعل مع القسمة على صفر.يمكنك أيضًا الحساب باستخدام هذه العناصر، على سبيل المثال 2 + INF = INF

NaN ليست ميزة روبي فريدة من نوعها، فهي رقمية في Java وC++ و...أيضاً

نصائح أخرى

أعتقد أن جعل NAN رقمًا منطقيًا تمامًا ...

جرب 0.0 / 0.0 في IRB -> النتيجة هي NAN (والتي في هذه الحالة هي اللانهاية)

إن Infinity هو نوع من الرقم الرياضي ، ولكن لا يزال ، لا يمكنك التعبير عنه من نوع بيانات ... في الرياضيات ، تستخدم رمزًا خاصًا أيضًا ...

ملاحظة: يمكنك استخدام metric.nan؟ للتحقق من ذلك ... ثم يجب أن تعمل كما تتوقع ...

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