الفرق بين المراجعتين لصفحة: «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 في توثيق روبي الرسمي.]

مراجعة 07:26، 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: يعيد العدد العشري الذي يسبق العدد العشري الذي استُدعي معه.

مصادر