الفرق بين المراجعتين ل"Ruby/Float/next float"

من موسوعة حسوب
< Ruby‏ | Float
اذهب إلى التنقل اذهب إلى البحث
(إنشاء الصفحة.)
 
 
(مراجعة متوسطة واحدة بواسطة نفس المستخدم غير معروضة)
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Float]]
 
[[تصنيف: Ruby Float]]
يعيد التابع <code>next_float</code> العدد التالي للعدد الصحيح الذي استُدعي معه. أي يعيد القيمة <code>int+1</code>.   
+
يعيد التابع <code>next_float</code> العدد العشري الذي يلي العدد العشري الذي استُدعي معه.   
  
 +
استدعاء التابع <code>next_float</code> مع القيمة الثابتة <code>Float::MAX</code> و <code>Float::INFINITY</code> يعيد القيمة <code>Float::INFINITY</code> الثابتة. 
 +
 +
استدعاء التابع بالشكل <code>Float::NAN.next_float</code> يعيد القيمة <code>Float::NAN</code>.
 
==البنية العامة==
 
==البنية العامة==
<syntaxhighlight lang="ruby">next  integer‎</syntaxhighlight>
+
<syntaxhighlight lang="ruby">next_float float</syntaxhighlight>
 
==القيمة المعادة==
 
==القيمة المعادة==
يعاد عدد صحيح يمثِّل العدد التالي للعدد المعطى.
+
يعاد العدد العشري الذي يلي العدد العشري المعطى.
  
 
==أمثلة==
 
==أمثلة==
مثال على استخدام التابع <code>next‎</code>:
+
مثال على استخدام التابع <code>next_float</code>:
<syntaxhighlight lang="ruby">1.next      #=> 2
+
<syntaxhighlight lang="ruby">0.01.next_float    #=> 0.010000000000000002
(-1).next   #=> 0
+
1.0.next_float    #=> 1.0000000000000002
1.succ      #=> 2
+
100.0.next_float  #=> 100.00000000000001
(-1).succ  #=> 0
+
 
</syntaxhighlight>
+
0.01.next_float - 0.01    #=> 1.734723475976807e-18
 +
1.0.next_float - 1.0      #=> 2.220446049250313e-16
 +
100.0.next_float - 100.0  #=> 1.4210854715202004e-14
 +
 
 +
f = 0.01; 20.times { printf "%-20a %s\n", f, f.to_s; f = f.next_float }
 +
#=> 0x1.47ae147ae147bp-7 0.01
 +
#  0x1.47ae147ae147cp-7 0.010000000000000002
 +
#  0x1.47ae147ae147dp-7 0.010000000000000004
 +
#  0x1.47ae147ae147ep-7 0.010000000000000005
 +
#  0x1.47ae147ae147fp-7 0.010000000000000007
 +
#  0x1.47ae147ae148p-7  0.010000000000000009
 +
#  0x1.47ae147ae1481p-7 0.01000000000000001
 +
#  0x1.47ae147ae1482p-7 0.010000000000000012
 +
#  0x1.47ae147ae1483p-7 0.010000000000000014
 +
#  0x1.47ae147ae1484p-7 0.010000000000000016
 +
#  0x1.47ae147ae1485p-7 0.010000000000000018
 +
#  0x1.47ae147ae1486p-7 0.01000000000000002
 +
#  0x1.47ae147ae1487p-7 0.010000000000000021
 +
#  0x1.47ae147ae1488p-7 0.010000000000000023
 +
#  0x1.47ae147ae1489p-7 0.010000000000000024
 +
#  0x1.47ae147ae148ap-7 0.010000000000000026
 +
#  0x1.47ae147ae148bp-7 0.010000000000000028
 +
#  0x1.47ae147ae148cp-7 0.01000000000000003
 +
#  0x1.47ae147ae148dp-7 0.010000000000000031
 +
#   0x1.47ae147ae148ep-7 0.010000000000000033
 +
 
 +
f = 0.0
 +
100.times { f += 0.1 }
 +
f                          #=> 9.99999999999998      # should be 10.0 in the ideal world.
 +
10-f                        #=> 1.9539925233402755e-14 # the floating point error.
 +
10.0.next_float-10          #=> 1.7763568394002505e-15 # 1 ulp (unit in the last place).
 +
(10-f)/(10.0.next_float-10) #=> 11.0                   # the error is 11 ulp.
 +
(10-f)/(10*Float::EPSILON)  #=> 8.8                    # approximation of the above.
 +
"%a" % 10                  #=> "0x1.4p+3"
 +
"%a" % f                    #=> "0x1.3fffffffffff5p+3" # the last hex digit is 5.  16 - 5 = 11 ulp.</syntaxhighlight>
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Float/pred|pred]]</code>: يعيد العدد السابق على العدد الذي استُدعي معه.   
+
* التابع <code>[[Ruby/Float/prev float|prev_float]]</code>: يعيد العدد العشري الذي يسبق العدد العشري الذي استُدعي معه.   
 
==مصادر==
 
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Integer.html#method-i-next قسم التابع next‎ في الصنف Float في توثيق روبي الرسمي.]
+
*[http://ruby-doc.org/core-2.5.1/Float.html#method-i-next_float قسم التابع next_float في الصنف Float في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 07:27، 24 نوفمبر 2018

يعيد التابع next_float العدد العشري الذي يلي العدد العشري الذي استُدعي معه.

استدعاء التابع next_float مع القيمة الثابتة Float::MAX و Float::INFINITY يعيد القيمة Float::INFINITY الثابتة.

استدعاء التابع بالشكل Float::NAN.next_float يعيد القيمة Float::NAN.

البنية العامة

next_float  float

القيمة المعادة

يعاد العدد العشري الذي يلي العدد العشري المعطى.

أمثلة

مثال على استخدام التابع next_float:

0.01.next_float    #=> 0.010000000000000002
1.0.next_float     #=> 1.0000000000000002
100.0.next_float   #=> 100.00000000000001

0.01.next_float - 0.01     #=> 1.734723475976807e-18
1.0.next_float - 1.0       #=> 2.220446049250313e-16
100.0.next_float - 100.0   #=> 1.4210854715202004e-14

f = 0.01; 20.times { printf "%-20a %s\n", f, f.to_s; f = f.next_float }
#=> 0x1.47ae147ae147bp-7 0.01
#   0x1.47ae147ae147cp-7 0.010000000000000002
#   0x1.47ae147ae147dp-7 0.010000000000000004
#   0x1.47ae147ae147ep-7 0.010000000000000005
#   0x1.47ae147ae147fp-7 0.010000000000000007
#   0x1.47ae147ae148p-7  0.010000000000000009
#   0x1.47ae147ae1481p-7 0.01000000000000001
#   0x1.47ae147ae1482p-7 0.010000000000000012
#   0x1.47ae147ae1483p-7 0.010000000000000014
#   0x1.47ae147ae1484p-7 0.010000000000000016
#   0x1.47ae147ae1485p-7 0.010000000000000018
#   0x1.47ae147ae1486p-7 0.01000000000000002
#   0x1.47ae147ae1487p-7 0.010000000000000021
#   0x1.47ae147ae1488p-7 0.010000000000000023
#   0x1.47ae147ae1489p-7 0.010000000000000024
#   0x1.47ae147ae148ap-7 0.010000000000000026
#   0x1.47ae147ae148bp-7 0.010000000000000028
#   0x1.47ae147ae148cp-7 0.01000000000000003
#   0x1.47ae147ae148dp-7 0.010000000000000031
#   0x1.47ae147ae148ep-7 0.010000000000000033

f = 0.0
100.times { f += 0.1 }
f                           #=> 9.99999999999998       # should be 10.0 in the ideal world.
10-f                        #=> 1.9539925233402755e-14 # the floating point error.
10.0.next_float-10          #=> 1.7763568394002505e-15 # 1 ulp (unit in the last place).
(10-f)/(10.0.next_float-10) #=> 11.0                   # the error is 11 ulp.
(10-f)/(10*Float::EPSILON)  #=> 8.8                    # approximation of the above.
"%a" % 10                   #=> "0x1.4p+3"
"%a" % f                    #=> "0x1.3fffffffffff5p+3" # the last hex digit is 5.  16 - 5 = 11 ulp.

انظر أيضا

  • التابع prev_float: يعيد العدد العشري الذي يسبق العدد العشري الذي استُدعي معه.

مصادر