整数除算
答えて
div
の場合、引数は整数である必要があります。 /
は、引数として任意の数値、特に浮動小数点数を受け入れます。だからあなたたとえば、次のように動作します:
1> 4613.9145/100.
46.139145
を、違いを対比してみてくださいするには:
2> 10/10.
1.0
3> 10 div 10.
1
ドキュメント:http://www.erlang.org/doc/reference_manual/expressions.html
更新:Integer divisionは、時々、\
をすることができ表記しました
a \ b = floor(a/b)
標準のlibにないfloor関数が必要です。
% intdiv.erl
-module(intdiv).
-export([floor/1, idiv/2]).
floor(X) when X < 0 ->
T = trunc(X),
case X - T == 0 of
true -> T;
false -> T - 1
end;
floor(X) ->
trunc(X) .
idiv(A, B) ->
floor(A/B) .
使用法: "定義"
$ erl
...
Eshell V5.7.5 (abort with ^G)
> c(intdiv).
{ok,intdiv}
> intdiv:idiv(4613.9145, 100).
46
私にはわからない、非常にあなたが何を意味しますか言語設計者は自由にオペレータを定義することができます。 Erlangでは、整数引数だけを受け入れるようにdiv
を定義しています。
Erlangのクリエイターが知りたいと思っている設計上の決定であれば、それらを電子メールで送信できます。また、あなたが(非常に短い)文法を吟味するのに不思議であれば、それはhereです。幸運!
はい、いいえ。もう一度http://mathworld.wolfram.com/IntegerDivision.htmlを読んでください。もちろん、式(1 == 1)をfalseとして定義することはできますが、そのすべての人には問題があります。 – Bertaud
そのリンクのaとbの型は定義されていません。私は、整数を使用し、aとbが整数である分数として中間結果を表現する例が強く示唆していると思います。 – cthulahoops
Erlangの整数除算div
は、入力として2つの整数を取り、整数を返すように定義されています。以前のコメントhttp://mathworld.wolfram.com/IntegerDivision.htmlで与えたリンクは、その例では整数しか使用していないので、この議論ではあまり役に立ちません。 trunc
とround
を使用すると、任意の引数を使用できます。
あなたが探しているものは、@Bertaudです。 Erlangのdiv
は、他の場所での定義方法にかかわらず、整数でしか動作しません。
trunc(4613.9145) div 100.
またはあなたの代わりにdiv
の/
を使用し、その後整数に商を変換することができます:あなたはdiv
を呼び出す前に、整数の引数を変換することができ
trunc(4613.9145/100).
そしてtrunc
がまたは何をしてもしなくてもよいですround
、床または天井(Erlangの標準ライブラリでは定義されていませんが、mikuが上記のfloor
で行ったように自分自身を定義することは難しくありません)が必要です。これはErlangが何かを仮定せず、あなたのために変換を行う理由の一部です。しかし、いずれの場合でも、Erlangの2つの非整数の整数商が必要な場合は、何らかの明示的な変換ステップをどこかに持たなければなりません。
- 1. 整数の除算
- 2. SSE整数除算?
- 3. awkの整数除算
- 4. スカラの整数除算
- 5. Javaの整数除算
- 6. MIPS:整数の乗算と除算
- 7. 小数点以下の整数除算
- 8. MARIE ASM Lang - 整数除算(正/負)
- 9. 整数の除算は常にゼロ
- 10. Common Lispでの整数除算
- 11. 整数除算の最適化MSVC C++
- 12. x86プロセッサの整数除算アルゴリズム
- 13. 文字列内の整数の除算
- 14. 2つの整数のMOD除算
- 15. 整数除算またはゼロでモジュロ
- 16. 整数除算のRスイープ等価
- 17. gpuRを使った整数除算
- 18. 無限大と整数倍の複素乗算/除算
- 19. 除算除算を使用せずに16による整数またはキャスト
- 20. C++ - 整数による整数除算の返答が正しくない
- 21. Java:整数をより大きな整数で除算すると0
- 22. 整数の除算値浮動小数点値を返す
- 23. 長整数のpythonでの除算エラー最小公倍数
- 24. ビットシフトの加減算を使用した対数時間の整数除算
- 25. なぜこの整数除算は0ですか?
- 26. 符号なし8ビット整数のビンジュム除算。 C
- 27. 整数をVBA(Excel)を使って時間で除算する
- 28. 非復元符号付き整数除算後の修正
- 29. Decimalデータ型を使用したVBA整数除算
- 30. Java整数の丸め(除算に関連する)
私は同意しません。結果は46で、46.139145ではありません。 div =整数除算、/ =浮動小数点除算 – Bertaud
あなたが提案したものは、それは非論理的です。trunc(N/100)は結果を返します。 div関数は、整数除算の定義を尊重していないようです。 – Bertaud
@Bertaud:申し訳ありませんが、ここで何かを混同するつもりはありませんでした。しかし、その後、あなたの質問を言い換えるようにしてください。そうすれば答えがより明確になります。 float/intの除算、丸められた部分、床、天井の整数部分を求めますか?オペレーションへの引数は特定の型でなければならず、あなたの例では、それが満たされていないので、引数の誤りが間違っています。 – miku