float型などの浮動少数同士の論理和をとるには

解決


TOYAMA  2007-11-01 01:35:10  No: 66711

float型たとえば
a=0.25
b=0.25でc = a | bなどのビットごとの論理和をとりたいのですが
VC++ではコンパイルエラーとなってしまいます。どなたか方法をご存知の方いませんでしょうか。


επιστημη  2007-11-01 02:00:16  No: 66712

こんなんでえぇですか?

#include <iostream>

// sizeof(float) = sizeof(long) を前提としています。
union float_bits {
  float fval;
  long lval;
};

int main() {
  float_bits fba, fbb, fbc;
  fba.fval = 0.25;
  fbb.fval = 0.25;
  fbc.lval = fba.lval | fbb.lval;
  std::cout << fbc.fval << std::endl;
}


TOYAMA  2007-11-01 02:08:02  No: 66713

共用体をとればいいことにきずきませんでした。
まだ試していませんが問題解決としたいと思います。どうも有り難うございました。


yoh2  2007-11-01 09:05:34  No: 66714

念のため注記。
浮動小数点数の内部構造の勉強の一環として、内部表現をそのまま使ったビット演算を
したい、というならεπιστημηさんの方法でよいのですが、もし、

・ 10進表記での 0.5  は2進表記で0.1
・ 10進表記での 0.25 は2進表記で0.01
・ 2進表記での0.1と0.01とのorは2進表記での 0.11、即ち10進表記での0.75
  → 10進表記での0.5と0.25とのorは0.75

という結果を期待しているのでしたら、浮動小数点数型を使った方法は使えません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加