[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...

はじめまして。

12 messages 2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法 — "U.Nakamura" <usa@...> 2009/12/17

こんにちは、なかむら(う)です。

[ruby-list:46707] Re: Float::INFINITY

From: "NARUSE, Yui" <naruse@...>
Date: 2009-12-25 14:22:13 UTC
List: ruby-list #46707
成瀬です。

(2009/12/25 16:01), Yukihiro Matsumoto wrote:
> まつもと ゆきひろです
> 
> In message "Re: [ruby-list:46690] Float::INFINITY"
>     on Tue, 22 Dec 2009 19:53:03 +0900, "KISHIMOTO, Makoto" <ksmakoto@dd.iij4u.or.jp> writes:
> 
> |番兵としてInfinity値を使おうと思ったのですが、現在rubyには、
> |0.0で割るのような方法以外に、例えば組み込みの定数のような、
> |Infinityな値を得る方法はないのでしょうか?
> |
> |検索すると[ruby-dev:4760]というパッチが見つかるのですが。
> 
> ポータブルにInfinityの値を得る方法がないから、というのが現在
> の答えです。間違いであれば、喜んで取り込むのですが。最低限、
> IEEE754 を仮定すれば、ポータブルな方法があるのかしら?

IEEE754 を仮定するならば、+infinity と -infinity のバイナリ表現が
決まっているので、無理矢理作ればいいんじゃないですか。
http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html

#include <math.h>
#include <inttypes.h>
#include <stdio.h>

union l2d {
    int64_t l;
    double d;
};

int main(void)
{
    union l2d ld;
    ld.l = INT64_C(0x7FF0000000000000);
    printf("%d\n", isinf(ld.d));
    return 0;
}

とりあえず以下において 1 が返る事は確認しました。

FreeBSD 7.1-RELEASE-p8 i386
FreeBSD 8.0-PRERELEASE amd64
Linux 2.6.24.2-pentiumm unknown
Linux 2.6.24-etchnhalf.1-amd64 unknown
Darwin 9.8.0 powerpc
NetBSD 4.0 i386

http://docs.sun.com/app/docs/doc/805-3177/6j31gjo48?l=ja&a=view
http://docs.sun.com/app/docs/doc/805-5828/6j5ggprd3?l=Ja&a=view
http://seclan.dll.jp/c99d/c99d08.htm


ところで、SVID3 や SVR4、C90、VC 2003 あたりの時点では少なくとも
HUGE_VAL が入っていてかつ、
Ruby の Float の内部表現は double なので HUGE_VAL で
特に問題がないと思うのですが、なんでこれじゃダメなんですか?

-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread