英文:
How to increment a counter according to the decimal part of a real number
问题
我想根据我们不知道其值的实数的小数部分(每次计算其值)来递增或递减一个计数器,该值必须在 [0,1] 范围内。
如果实数小数点后面有 1 位数字,计数器将递增 0.1,
例如:u = 0.5,然后 cpt = 0.5+0.1。
如果小数点后有 2 位数字,计数器将递增 0.01,
例如:u = 0.08,那么 cpt = 0.08+0.01。
它也可以以这种方式递减。
例如:
u = 0.5
if (instructions){
cpt = u + 0.1; //0.6
}
else
cpt = u - 0.1 //0.4
但是我们也可能有这种情况:
u = 0.1
if (instructions){
cpt = u + 0.1; //0.2
}
else
cpt = u - 0.01 //0.09
在这种情况下,我们递增了 0.1,但我们以 0.01 的方式递减,因为如果我们以 0.1 的方式递减,将会得到 u = 0。
英文:
I want to increment or decrement a counter according to the decimal part of a real number we don't know its value (we calculate its value each time)
this value must be in the range [0,1].
if the real number has 1 digit after the decimal point the counter will increment with 0.1,
Ex: u = 0.5 then cpt = 0.5+0.1.
if it has 2 digits after the decimal point the counter will increment with 0.01
Ex : u = 0.08 so cpt=0.08+0.01
it can also decrement in this way.
for exemple :
u = 0.5
if (instructions){
cpt = u +0.1; //0.6
}
else
cpt = u-0.1 //0.4
but we kan have this :
u= 0.1
if (instructions){
cpt = u +0.1; //0.2
}
else
cpt = u-0.01 //0.09
in this case we increment with 0.1 but we decrement with 0.01 because if we decrement with 0.1 we will have u = 0
答案1
得分: 0
以下代码对我效果很好,我尝试了诸如 u = 0.5
和 u = 0.580070
这样的值。得到的 delta
值,您可以选择加上或减去,以计算 cpt
。
var u = 0.5;
var exponent = BigDecimal.valueOf(u).scale();
var delta = Double.valueOf("1.0E-" + exponent).doubleValue();
我发现,使用字符串转换得到的结果比使用指数算术(如 Math.pow(0.1, exponent)
)更精确,后者会产生舍入误差。
英文:
The following lines work well for me, I tried values like u = 0.5
and u = 0.580070
. The resulting delta
you can either add or subtract to calculate cpt
.
var u = 0.5;
var exponent = BigDecimal.valueOf(u).scale();
var delta = Double.valueOf("1.0E-" + exponent).doubleValue();
I found that the resulting value is more precise using String conversion than doing exponential arithmetics like Math.pow(0.1, exponent)
where you get rounding errors.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论