Bo2SS

Bo2SS

2. 数学演算

コースの内容#

C 言語の数学演算#

  • 画像
  • = 代入

    • 他の演算子と組み合わせて使用できます:+=、<<=、...
  • / 除算

    1. 左右が整数の場合:商を求め、切り捨てます
    2. 左右のいずれかが浮動小数点数の場合:結果は浮動小数点数になります
  • () 演算の優先順位を上げる

  • ⭐ビット演算、効率が高い

    • コンピュータは異なるデータ型に対して、すべてのデータを2 進数で格納します
    • 8 ビット→1 バイト
    • int 型は 32 ビットで、符号付きの場合は 2^31-1 まで表現できます
    • ビット演算では、①2 進数表現に展開し、②対応するビットの間にのみ関係がある
    • ビット演算は浮動小数点数に対応していませんか?
      • 意味がありません。64 ビットの浮動小数点数の場合、最上位の 1 ビットは符号ビット S で、次の 11 ビットは指数 E で、残りの 52 ビットは有効数字 M です。
      • ビットごとの AND 演算を行う場合、最初の 12 ビットの演算規則は何ですか?指数ビットの AND 演算結果の意味は何ですか?これが本質的な問題です、2 つの浮動小数点数の AND 演算には数学的な意味がありません。
    • ^ XOR
      • 特徴:自己の逆演算;交換法則、結合法則をサポートします
      • 逆演算
        • 前提:交換法則を満たす
          • 減算、除算は満たしません
          • 減算は加算の逆演算ですが、逆は成り立ちません
          • 除算は乗算の逆演算ですが、逆は成り立ちません [厳密ではなく、乗数が 0 の場合は考慮していません]
  • <<左シフト>> 右シフト

    • 左シフト 1 ビットは 2 倍になります
    • 右シフト 1 ビットは 2 で割り、切り捨て、符号は変わりません
      • 左側は符号ビットを常に埋めます(符号ビットが最上位の符号付き数値の場合)
      • 左側は強制的に 0 を埋めます(符号なし数値)

C 言語の数学関数#

ヘッダーファイル:math.h

:abs () 関数は stdlib.h にあります

  • 画像
プロトタイプdouble pow(double a, double b);指数関数
-double sqrt(double x);平方根
-double ceil(double x);切り上げ
-戻り値は double 型であり、int の範囲を超える数値も表現できます
-double floor(double x);切り捨て
-int abs(int x);整数の絶対値;stdlib.h
-doublefabs(double x);実数の絶対値;f は以前に float を表していたかもしれません
-double log(double x);e を底とする対数
-double log10(double x);10 を底とする対数
-底の変換公式を使用して、任意の底の対数を計算できます:log (2) 8 = log (8) /log (2)
-double acos(double x);逆余弦関数:arccos ()
戻り値:角度の弧度法
⭐π = acos(-1)

画像

授業の練習#

  • 画像
  • double 型の制御文字は「% lf」です
  • scanfの制御文字は必ず引数の型に対応する必要があります。そうでない場合、読み込むことができません
    • double x;

    • scanf するときは必ず「% lf」を使用する必要があります。「% f」を使用することはできません。以下のようになります:

      • 画像
      • printf は厳格ではないため、制御文字と型が完全に一致する必要はありません。おそらく型変換が行われるでしょう
      • コード
        • img
        • pow を巧妙に使用し、1/3 乗は立方根を表します
          • ⭐1/ 3**.0** ではなく、1 / 3 は使用できません
        • math ライブラリを使用するために、gcc コンパイル時に - lm を追加する必要があります
  • 画像
  • π は acos (-1) を使用してより正確に表現できます
  • コード
    • 画像
    • 除算後に乗算する方が安全で、オーバーフローしにくいです

ハイライトノート#

  • double 型の制御文字は「% lf」です
  • π は acos (-1) を使用してより正確に表現できます

コードデモ#

練習#

  • 画像
  • XOR を使用した交換はユニークなアプローチですが、おすすめではありません

    • 整数型のみで使用できるため、XOR を使用できます
    • 速度は temp を使用するよりも速くありません
    • 同じ変数同士の交換では 0 になります:swap (a, a)

追加の知識#

  • 演算子の優先順位と結合順序表- 百度
    • p-- の演算順序は ①p が指すアドレス - 1、②そのアドレスの値をで取得する
      • (*p)-- は①p が指すアドレスの変数の値を取得し、その変数の値を - 1 することです
  • XOR の法則
    • a ^ a = 0;
    • 0 ^ a = a;
    • 2 回ずつ現れる数字の配列から、一度だけ現れる数字を見つけることができます
  • xshell で C 言語を実行すると、警告が表示されません
    • g++ *.cpp -Wall
      • このオプションを使用すると、GCC が提供する有用な警告をすべて有効にすることができます
      • -W {warning} を使用して特定の警告をマークすることもできます
      • 画像

考えるポイント#

  • XOR 演算を使用して変数を交換する利点は何ですか?
    • 第三の変数のメモリを節約できます
    • 原理を考える
      • 逆演算を行うことができます
    • または
    • 自身と自身の XOR は 0 になります
      * 任意の変数と 0 の XOR は値が変わりません
    • 上記の原理に基づいて考えると、実際には +- 演算子を使用してもできますか?
      • a' = a + b
      • b = a' - b = a
      • a = a' - b = a' - a = b
      • ただし、これによってビット演算の効率性が活用されず、2 つの数の和がオーバーフローしないことが保証される必要があります~

ヒント#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。