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

解決


TOYAMA  2007-10-31 16:35:10  No: 66711  IP: 192.*.*.*

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

編集 削除
επιστημη  2007-10-31 17:00:16  No: 66712  IP: 192.*.*.*

こんなんでえぇですか?

#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-10-31 17:08:02  No: 66713  IP: 192.*.*.*

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

編集 削除
yoh2  2007-11-01 00:05:34  No: 66714  IP: 192.*.*.*

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

・ 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

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

編集 削除