すべてのプログラミング言語には、次の2つの値の小さい方または大きい方を選択するためのこれらの名前の関数があります。
min()
&max()
floor()
&ceil()
/ceiling()
そして、いくつかの言語には両方があります。 JavaScriptはその一例だと思います。
前者のペアと後者のペアの違いについて、私はいつも少し曖昧でした。 min
/max
はより単純で、floor
/ceiling
はより数学的な印象を持っていますが、それだけでは十分ではありません。
奇妙なことに、一般的にGoogleを検索しても、StackOverflowやインターネットのどこにもこれについて議論されているものは見つかりません。 プログラミング言語が両方を提供するときに、これらの関数のどちらを使用するかを決定するためのいくつかのベストプラクティスまたは経験則はありますか?
これはリンゴ対オレンジです。ほとんどの言語/ APIでは、min
/max
は2つ(またはそれ以上)の入力を受け取り、最小/最大を返します。 floor
/ceil
引数を1つ取り、それを切り捨てるか、最も近い整数に切り上げます。
私の知る限り、max
とmin
はコレクションで使用されます。たとえば、数値の配列です。 Floor
とceiling
は単一の数値に使用されます。例えば:
min(1, 2, 3, 4) => 1
max(1, 2, 3, 4) => 4
floor(3.5) => 3
ceiling(3.5) => 4
min(1, 2) == 1
max(1, 2) == 2
floor(3.9) == 3
round(3.9) == 4
ceil(3.1) == 4
round(3.1) == 3
trunc, as in (int)(3.xxx) = 3 (no matter what xxx is)
定義について:
floor
は、n
よりも小さい最大の整数です。
ceil
は、n
より大きい最小の整数です。
この投稿は古いと思いますが、重要な違いが見落とされています。
関数round()はゼロに向かって、またはゼロから離れて丸めますが、関数ceil()とfloor()は正の無限大と負の無限大に向かって丸めます。
これは、正の数と負の数の両方を扱う場合に重要です。つまり.
round(4.900000) = 5.000000
ceil(4.900000) = 5.000000
floor(4.900000) = 4.000000
round(4.100000) = 4.000000
ceil(4.100000) = 5.000000
floor(4.100000) = 4.000000
round(-4.100000) = -4.000000
ceil(-4.100000) = -4.000000
floor(-4.100000) = -5.000000
round(-4.900000) = -5.000000
ceil(-4.900000) = -4.000000
floor(-4.900000) = -5.000000
Javascriptの場合:
function ceil() {
var d = Math.ceil(5.1);
var x = d + "<br>";
document.getElementById("ceil").innerHTML = x;
}
function floor() {
var d = Math.floor(5.1);
var x = d + "<br>";
document.getElementById("floor").innerHTML = x;
}
function round() {
var d = Math.round(5.1);
var x = d + "<br>";
document.getElementById("round").innerHTML = x;
}
<!DOCTYPE html>
<html>
<body>
<p>Click the different buttons to understand the concept of Ceil, Floor and Round</p>
<button onclick="ceil()">Ceil 5.1</button>
<p id="ceil"></p>
<button onclick="floor()">Floor 5.1</button>
<p id="floor"></p>
<button onclick="round()">Round 5.1</button>
<p id="round"></p>
</body>
</html>
min()
およびmax()
は、2つの値のうち小さい方または大きい方を返します。
min(3, 5);
は3を返します。
floor()
およびceiling()
は、次のようにdoubleを整数に切り捨てます。
floor(5.3);
は5を返します。
あなたの質問を理解できません。たとえば、次を参照してください。
a = 1.7
b = 2.8
min(a,b) = 1.7 (returns the minimum of a and b)
max(a,b) = 2.8 (returns the maximum of a and b)
floor(a) = 1 (rounds towards 0)
floor(b) = 2 (rounds towards 0)
ceil(a) = 2 (rounds up)
ceil(b) = 3 (rounds up)