2016-11-08 8 views
-2

こんにちは、申し訳ありません、この質問は前に頼まれましたが、私はヨセフスの問題に取り組んでいると、これはI'veが書かれたコードである場合。エラー:バイナリ式に無効なオペランド「フロート」

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

int main(void) 

{ 
    printf("Number of people: "); 
    float f=GetFloat(); 
    const int a=pow(2,floor(log(f)/log(2))); 
    float c= 2*(f-2^a)+1; 
    printf("%f\n", c); 

} 

私はそれが私にこのエラーメッセージを表示します、それをコンパイルしてみてください。

clang -ggdb3 -O0 -std=c99 -Wall -Werror Josephus.c -lcs50 -lm -o Josephus 
Josephus.c:11:20: error: invalid operands to binary 
     expression ('float' and 'float') 
    float c= 2*(f-2^a)+1; 
       ~~~^~ 

私はコードで記述しようとしている方程式は、c = 2(F - 2^a)は、 "c" は "F" は、私が探している番号です+ 1 人々の数と "a"は、fより小さい2の大きなパワーです。

一切の文法の間違いやトピックの知識の私の不足のため申し訳ありませんが、私はプログラミングに新たなんです。乾杯!

+1

HTTPの関連/デュープ: //stackoverflow.com/questions/4843304/why-is-my-power-operator-not-workingとhttp://stackoverflow.com/questions/845912/what-is-the-c-function-to-raise- a-number-to-a-power – NathanOliver

答えて

0

あなたの問題がf-2^aです。おそらく、これはfから電源aに2を引くことを期待しています。トラブルが^あるXOR演算子であり、それは減算よりも低い優先順位です。コンパイラはこれを(f-2) xor aとして扱います。 xorのLHSは浮動小数点型なので、aは浮動小数点型に昇進しています... xorは浮動小数点型では機能しません!

修正はどちらかである:

f - pow(2.0, a) 

か:。

f - (1u << a) 

(だけあなたはaが範囲内にあることを確信している場合は、後者を使用し

+0

これは本当に助けになった、私はn最後に私はいくつかの事を変えました、それは動作し、問題への実際の答えを与える! – carlos1106

関連する問題