HSP3掲示板

  • ここは、Hot Soup Processorについての話題を扱うボードです。
  • HSP3.x、HSP2.xについての情報、質問、ご意見などをお書きください。
  • 新しくオフィシャルサイトにHSP3掲示板が作成されていますので、通常はそちらをご利用ください。
  • 初めて書き込みされる方は、まず使い方をお読みください。
  • 掲示板オフラインリーダーmamimiについての情報は、こちらをどうぞ。
  • ふさわしくない話題や書き間違いは、管理人(おにたま)の判断で削除することがあります。

    [ツリー表示] [新着記事]
    一 括 講 読

    理解できない計算結果を出力して困っています。  投稿者:石松  (10/07/23(金) 10:18) sndr2.swgproxy.osakac.ac.jp
    HSP 3.2.1をWindows7の64bit版で使用しています。
    
    下記2つのプログラムを作りましたが、計算値に誤差があるようです。
    
    for i,0,8,1
    atai=powf(2,i)
    mes "2の " + i + " 乗は " + atai + " です。"
    next
    
    上記のプログラムの値は下記になります。
    
    2の 0 乗は 1.000000 です。
    2の 1 乗は 2.000000 です。
    2の 2 乗は 4.000000 です。
    2の 3 乗は 8.000000 です。
    2の 4 乗は 16.000000 です。
    2の 5 乗は 32.000000 です。
    2の 6 乗は 64.000000 です。
    2の 7 乗は 128.000000 です。
    
    この値は正しいのですが、整数にすると理解できない値を出力します。
    そのプログラムは、下記になります。
    
    for i,0,8,1
    atai=int(powf(2,i))
    mes "2の " + i + " 乗は " + atai + " です。"
    next
    
    上記のプログラムの値は下記になります。
    
    2の 0 乗は 1 です。
    2の 1 乗は 2 です。
    2の 2 乗は 4 です。
    2の 3 乗は 7 です。
    2の 4 乗は 16 です。
    2の 5 乗は 32 です。
    2の 6 乗は 63 です。
    2の 7 乗は 128 です。
    
    なぜ、2の3乗の値が7で、2の6乗が63になるのかが理解できません。
    
    解決策を教えてください。
    Re: 理解できない計算結果を出力して困っています。  投稿者:ANTARES [Link] (10/07/24(土) 05:10) softbank219187188037.bbtec.net
    別法
    
    for i,0,8,1
    atai=int(powf(2,i)+0.1)	;八捨九入(もちろん四捨五入でも可)
    mes strf("2の %d 乗は %d です。",i, atai)
    next
    
    前のスクリプトの「2.0」は「2」でいいです。
    Re^2: 理解できない計算結果を出力して困っています。  投稿者:石松  (10/07/26(月) 09:39) sndr2.swgproxy.osakac.ac.jp
    ANTARESさん、教えていただきありがとうございました。
    
    教えていただいた方法で解決はするのですが、これってHSPのバグのような気がしませんか。
    
    > for i,0,8,1
    > atai=int(powf(2,i)+0.1);八捨九入(もちろん四捨五入でも可)
    > mes strf("2の %d 乗は %d です。",i, atai)
    > next
    Re^3: 理解できない計算結果を出力して困っています。  投稿者:ANTARES [Link] (10/07/27(火) 00:31) softbank219187188032.bbtec.net
    >教えていただいた方法で解決はするのですが、
    >これってHSPのバグのような気がしませんか。
     C++で同じことをやって、どうなるか試してみようかと思いましたが、
    仮に私がバグだと思っても開発担当者がバグだと思わなければ
    意味がないのでやめました。
    Re^4: 理解できない計算結果を出力して困っています。  投稿者:ANTARES [Link] (10/07/27(火) 02:00) softbank219187188032.bbtec.net
     結局、バグと言えば、まあバグなのでしょうが、
    HSPのバグかAPIのバグかは調べてみないとわからないということです。
    Re^5: 理解できない計算結果を出力して困っています。  投稿者:石松  (10/07/27(火) 09:18) sndr2.swgproxy.osakac.ac.jp
    ANTARESさんのおっしゃるとおりだと思います。
    
    しかし、プログラミング初心者マークの者としては、算数で習ったとおりの答えがほしいものですね。
    
    >  結局、バグと言えば、まあバグなのでしょうが、
    > HSPのバグかAPIのバグかは調べてみないとわからないということです。
    Re^6: 理解できない計算結果を出力して困っています。  投稿者:20100730  (10/07/30(金) 18:16) p7153-adsao01yokonib1-acca.kanagawa.ocn.ne.jp
    /*ご参考 /common/hspdef.as のマクロをその場しのぎで改造してみる */
    
    ;#define global ctype powf(%1,%2)         expf(logf(%1)*(%2))
     #define global ctype powf2(%1,%2)        expf(logf(%1)*(%2))*1.00000000000001
    
    
     repeat 35
     mes strf("2の %2d 乗は %20f %20f %12d %12d です。",cnt,powf(2,cnt),powf2(2,cnt),int(powf(2,cnt)),int(powf2(2,cnt)))
     loop
    Re: 理解できない計算結果を出力して困っています。  投稿者:ANTARES [Link] (10/07/24(土) 04:58) softbank219187188037.bbtec.net
    for i,0,8,1
    atai=powf(2.0,i)
    mes strf("2の %d 乗は %g です。",i, atai)
    next


    - Web Forum -