هل يمكن لأحد أن يشرح لي NaN في روبي؟
سؤال
لقد وجدت للتو خطأً في بعض عمليات التلاعب بالأرقام في برنامجي وأحصل على 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؟ للتحقق من ذلك ... ثم يجب أن تعمل كما تتوقع ...