我需要创建一个随机-1或1来将已存在的数字乘以。问题是我当前的随机函数生成-1,0或1.执行此操作的最有效方法是什么?
答案 0 :(得分:113)
请勿使用现有功能 - 只需拨打Math.random()
即可。如果< 0.5然后-1,否则1:
var plusOrMinus = Math.random() < 0.5 ? -1 : 1;
答案 1 :(得分:48)
我一直都是
的粉丝Math.round(Math.random()) * 2 - 1
因为它只是有道理。
Math.round(Math.random())
会给你0或1
将结果乘以2将得到0或2
然后减去1会得到-1或1.
直观!
答案 2 :(得分:11)
只为了它的乐趣:
var plusOrMinus = [-1,1][Math.random()*2|0];
或
var plusOrMinus = Math.random()*2|0 || -1;
但请使用您认为可维护的内容。
答案 3 :(得分:11)
为什么不尝试:
(Math.random() - 0.5) * 2
具有负值的可能性为50%,并且还会产生随机数。
或者如果确实需要-1/1:
Math.ceil((Math.random() - 0.5) * 2) < 1 ? -1 : 1;
答案 4 :(得分:4)
以前的答案显示,有很多方法可以做到。
Math.round()和Math.random最快的组合:
// random_sign = -1 + 2 x (0 or 1);
random_sign = -1 + Math.round(Math.random()) * 2;
您也可以使用Math.cos()(which is also fast):
// cos(0) = 1
// cos(PI) = -1
// random_sign = cos( PI x ( 0 or 1 ) );
random_sign = Math.cos( Math.PI * Math.round( Math.random() ) );
答案 5 :(得分:0)
username3:realm1:password3
username2:realm1:password2
username1:realm1:password1