Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一种算法,用于逐步接近某个数字,但从未达到该数字_Javascript_Algorithm - Fatal编程技术网

Javascript 一种算法,用于逐步接近某个数字,但从未达到该数字

Javascript 一种算法,用于逐步接近某个数字,但从未达到该数字,javascript,algorithm,Javascript,Algorithm,我需要一个不断更新的数字,使其接近最大值(或最小值),而不会达到最大值。我还希望每次更新都有一个平滑的过渡,比如曲线或其他东西(我从来没有学过数学或计算机科学,所以我不知道正确的术语) 以下是我目前得到的结果,但显然不起作用: let numberToUpdate = 5 // this number will vary after each update const numberToUpdateMin = 1 const numberToUpdateMax = 10 let someValu

我需要一个不断更新的数字,使其接近最大值(或最小值),而不会达到最大值。我还希望每次更新都有一个平滑的过渡,比如曲线或其他东西(我从来没有学过数学或计算机科学,所以我不知道正确的术语)

以下是我目前得到的结果,但显然不起作用:

let numberToUpdate = 5 // this number will vary after each update
const numberToUpdateMin = 1
const numberToUpdateMax = 10

let someValueA = 100 // this number will change randomly between updates
let someValueB = 50 // this number will change randomly between updates

function updateNumber() {
  let differenceBetweenValues = someValueA - someValueB

  if (differenceBetweenValues > 0) {
    // make numberToUpdate closer to numberToUpdateMax (without ever reaching it)
    numberToUpdate += (numberToUpdateMax - numberToUpdate) * (someValueA / someValueB) // this doesn't work at all
  }
  else if (differenceBetweenValues < 0) {
    // make numberToUpdate closer to numberToUpdateMin (without ever reaching it)
    numberToUpdate -= (numberToUpdate - numberToUpdateMin) * (someValueB / someValueA) // this doesn't work at all
  }
}
let numberToUpdate=5//此数字在每次更新后都会有所不同
常数numberToUpdateMin=1
常数numberToUpdateMax=10
让someValueA=100//此数字将在更新之间随机更改
让someValueB=50//此数字将在更新之间随机更改
函数updateEnumber(){
让值之间的差=某个值A-某个值B
if(值之间的差值>0){
//使numberToUpdate更接近numberToUpdateMax(从未达到它)
numberToUpdate+=(numberToUpdateMax-numberToUpdate)*(someValueA/someValueB)//这根本不起作用
}
else if(值之间的差值<0){
//使numberToUpdate更接近numberToUpdateMin(从未达到)
numberToUpdate-=(numberToUpdate-numberToUpdateMin)*(someValueB/someValueA)//这根本不起作用
}
}
任何帮助都将不胜感激,我不知道我在做什么,也不知道我应该用谷歌搜索什么条件才能得到合适的结果


编辑:它不必处理无限小/无限大的数字,它可以有一个上限。

这里是一个渐近函数的简单示例:

function generateAsymptotic(step) {
  return step / (step + 1);
}

随着步长越来越大,GenerateSymptotic将越来越接近1,但永远不会是1。

在计算机上,这是不可能的,因为可表示的不同值的数量是有限的,因此最终您将达到禁止的数量。

您正在寻找一些行为。您希望接近的值已知吗?或者,您是在为给定的方程搜索未知解吗?要接近的值是
numberToUpdateMax
numberToUpdateMin
,这取决于当时发生的
someValueA
someValueB
情况。我们可能需要仔细考虑“从未达到”要求,虽然它总是处理浮点数,但JS中有一些限制,它总共只有64位来存储fp数。超过值4503599627370495后,函数返回1。是的,在理论算术上它很好,但在有限机器上不是。