[#11890] Ruby and Solaris door library — "Hiro Asari" <asari.ruby@...>

Hi, there. This is my first patch against ruby. I think I followed

19 messages 2007/08/13
[#11892] Re: Ruby and Solaris door library — Daniel Berger <djberg96@...> 2007/08/14

Hiro Asari wrote:

[#11899] pack/unpack 64bit Integers — Hadmut Danisch <hadmut@...>

Hi,

13 messages 2007/08/14
[#11903] Re: pack/unpack 64bit Integers — Brian Candler <B.Candler@...> 2007/08/15

On Wed, Aug 15, 2007 at 06:50:01AM +0900, Hadmut Danisch wrote:

[#11948] Fibers in Ruby 1.9? — David Flanagan <david@...>

I just noticed that my ruby1.9 build of August 17th includes a Fiber

22 messages 2007/08/22
[#11949] Re: Fibers in Ruby 1.9? — Daniel Berger <djberg96@...> 2007/08/22

David Flanagan wrote:

[#11950] Re: Fibers in Ruby 1.9? — "Francis Cianfrocca" <garbagecat10@...> 2007/08/22

On 8/22/07, Daniel Berger <djberg96@gmail.com> wrote:

[#11952] Re: Fibers in Ruby 1.9? — MenTaLguY <mental@...> 2007/08/22

On Wed, 22 Aug 2007 20:50:12 +0900, "Francis Cianfrocca" <garbagecat10@gmail.com> wrote:

[#11988] String#length not working properly in Ruby 1.9 — "Vincent Isambart" <vincent.isambart@...>

I saw that Matz just merged his M17N implementation in the trunk.

17 messages 2007/08/25
[#11991] Re: String#length not working properly in Ruby 1.9 — "Michael Neumann" <mneumann@...> 2007/08/25

On Sat, 25 Aug 2007 10:54:20 +0200, Yukihiro Matsumoto

[#11992] Re: String#length not working properly in Ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/08/25

Hi,

[#12042] Encodings of string literals; explicit codepoint escapes? — David Flanagan <david@...>

This message contains queries that probably only Matz can answer:

16 messages 2007/08/31
[#12043] Re: Encodings of string literals; explicit codepoint escapes? — Yukihiro Matsumoto <matz@...> 2007/08/31

Hi,

Inverse Square Root

From: "Dave Pederson" <dave.pederson@...>
Date: 2007-08-24 06:28:26 UTC
List: ruby-core #11981
Hello-

I was wondering if it is possible to include the quake fast inverse square
root function in ruby?  I think all you would have to do is add the
following method to math.c

/*
 *  call-seq:
 *     Math.isqrt(numeric)    => float
 *
 *  Returns the inverse square root of <i>numeric</i>.
 */
static VALUE
math_isqrt(obj, y)
    VALUE obj, y;
{
    float x;

    Need_Float(y);
    x = (float) RFLOAT(y)->value;
    float xhalf = 0.5f*x;
    int i = *(int*)&x;
    i = 0x5f3759df - (i >> 1);
    x = *(float*)&i;
    x = x*(1.5f - xhalf*x*x);
    return rb_float_new(x);
}

Then, further down, add the following:

    rb_define_module_function(rb_mMath, "isqrt", math_isqrt, 1);


I added the code to my local source copy of 1.8.6 then ran make and make
install.  Finally, I ran the following ruby script:

#!/usr/bin/ruby -w
for i in 0..20
  print i
  print " - "
  puts Math.isqrt(i)
end

Which gave the following results (which seem correct):

0 - 1.98177537096858e+19
1 - 0.998307168483734
2 - 0.706930041313171
3 - 0.576846837997437
4 - 0.499153584241867
5 - 0.447141021490097
6 - 0.407681375741959
7 - 0.377444177865982
8 - 0.353465020656586
9 - 0.332953214645386
10 - 0.315685778856277
11 - 0.301036149263382
12 - 0.288423418998718
13 - 0.277312487363815
14 - 0.267214089632034
15 - 0.25775083899498
16 - 0.249576792120934
17 - 0.242388844490051
18 - 0.235677853226662
19 - 0.229414582252502
20 - 0.223570510745049

Cheers,

-Dave

In This Thread

Prev Next