お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"BASICの浮動小数点を変換"





N88BASICの浮動小数点をDelphiの実数に変換するfunctionです。
BASICのバイナリファイルを読み込む時に使います。
単精度の方はある程度の動作確認はとれていますが,倍精度の方は
自信ありません。
汚いコードですが,お役に立つことがあればと思い,アップします。

//Basicの単精度浮動小数点を実数に変換する
function BasicSingletoDouble(Value:Single):Double;
type TChararray=array[0..3] of byte;
var a:TChararray;int,j:integer;sb:ShortInt;t,x:Double;
begin
  a:=TChararray(Value);
  int:=1 shl 23+(a[2] and $7F) shl 16 +a[1] shl 8+a[0];
  if (a[2] and $80)=$80 then int:=-int;
  x:=int/$400000;
  sb:=a[3]-$82;
  if sb=0 then t:=1 else begin
    t:=1;
    for j:=1 to abs(sb) do t:=t*2;
    if sb<0 then t:=1/t;
    x:=t*x;
  end;
  Result:=X;
end;

//Basicの倍精度浮動小数点を実数に変換する
function BasicDoubletoDouble(Value:Double):Double;
type TChararray=array[0..7] of byte;
var a:TChararray;int1,int2,j:integer;sb:ShortInt;t,x:Double;
begin
  a:=TChararray(Value);
  int1:=1 shl 23+(a[6] and $7F) shl 16 +a[5] shl 8+a[4];
  int2:=(a[3] shl 24)+(a[2] shl 16)+a[1] shl 8 + a[0];
  X:=int1/$400000+a[3]/$400000/$100+a[2]/$400000/$100/$100+a[1]
      /$400000/$100/$100/$100+a[0]/$400000/$100/$100/$100/$100;
  if (a[6] and $80)=$80 then x:=-x;
  sb:=a[7]-$82;
  if sb=0 then t:=1 else begin
    t:=1;
    for j:=1 to abs(sb) do t:=t*2;
    if sb<0 then t:=1/t;
    x:=t*x;
  end;
  Result:=X;
end;

    ★☆★☆★ ──────────────────────────
        97/11/15(土) 23:39 MYU (BYI17601@niftyserve.or.jp)
    ───────────────────────────☆★☆★☆

Original document by MYU          氏 ID:(BYI17601)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum