我知道浮点计算很可能是不准确的。例如:
var x = 100*0.333;
这里x被设置为33.300000000000004而不是33。这可能看起来是一个小问题,但如果涉及舍入,它就会变得很严重。例如,Math.ceil(x)将是不正确的-将生成34而不是33。
问题是,我被告知JS在整数和浮点数之间没有太大的区别。所以我开始担心是否有任何方法可以确保积分除法是正确的。
JS中通常的整数除法公式似乎是Math.floor(n/m),其中n,m是整数。现在让我们假设m平均分配n。由于JS将每个数字视为浮点数,因此n/m将返回一个浮点数。如果这个浮点数不精确,但甚至比实际计算结果小一点点,那么
public static bool IsDivisible(double p, double n, double r, double k)
{
double x = p;
double a = 0.0, b = 0.0, c = 0.0;
while (x <= n)
{
a += Math.Floor(n / x);
if (x <= r)
b += Math.Floor(r / x);
if (x &l
我有一个奇怪的问题,我在for循环中的数学计算直到最后一次迭代才会计算出来,在这一点上它是100%的。我使用的公式是一个简单的百分比公式,用于计算到目前为止已处理的文件数组中的多少。我的代码如下:
for(int z=0;z<theFiles.size();z++) {
...
System.out.println(z); // Prints out the current iteration.
System.out.println(theFiles.size()); // Prints out the length of the arra
我有一个算法,对于整数x和起始整数i,使1< i < x,i的下一个值由i = floor(x / i) + (x mod i)计算。这种情况一直持续到我们已经看到的i。
在JavaScript中(尽管这个问题与语言无关):
function f(x, i) {
var map = {};
while(!map[i]) {
map[i] = true;
i = Math.floor(x / i) + (x % i); // ~~(x / i) is a faster way of flooring
}
return i
对于一个小项目(问题10 project Euler),我尝试将200万以下的所有质数求和。所以我使用了暴力方法,从0迭代到2'000'000,并检查这个数字是否是质数。如果是,我将其添加到总和中:
private int sum = 0;
private void calculate() {
for (int i = 0; i < 2000000; i++) {
if (i.isPrime()) {
sum = sum + i;
}
}
sysout(sum)
}
此计算的结果是1179908154,但这是不
我使用Python2.7.12;我正在学习的算法书使用Python 3。直到现在,我发现我可以很容易地将大多数算法转换为Python 2,但是这个平方根函数,使用牛顿定律,仍然无法实现。
下面是代码,在其最初的Python 3中。
def square_root(n):
root = n / 2 #initial guess will be 1/2 of n
for k in range(20):
root = (1 / 2) * (root + (n / root))
return root
下面是在Python2.7.12中调用函数时的错误:
pri
在下面的Kotlin代码示例中,我期望参数i的值等于0,比如参数k的情况。IDE将所有的i、j和k报告为Int。这是一个bug,还是我需要重新调整我对Kotlin在表达式中的转换的理解?例如,是否有一条规则总是在涉及除法而不是乘法的表达式中将/强制转换为Double?
fun main() {
//Kotlin 1.3.61
val x = 100 * 1.0/100 //Double
val i = 100 * 1/100 //Int
val j = 1/100 //Int
val k = 100 * j //Int
println(x)
for (i = 0; i < n; i++)
{
x[i] = (float) (i * step);
k = 5;
sum = 0;
while(k > 0)
{
sum = sum + (1/k) * sin((k*PI*x[i])/5);
k = k - 2;
}
y1[i] = (4/PI)*sum;
y2[i] = 0*(4/PI)*sin((PI*x[i])/5);
}
当调试
刚开始学习java并尝试编写一段简单的代码来显示基于的Pi近似;下面的代码在命令行中得到的结果是-33.343229.我觉得很奇怪。我知道我的代码是不完整的,因为我没有限制小数点之后的数字数量,这是我试图从使用BigDecimal中得到的。我不太明白我应该用它做什么,尽管在阅读了文档之后!
有没有人知道我是否可以修正当前的错误,以及如何对小数点后的数字进行限制?谢谢!
class calculatePi {
public static void main(String[] args) {
calculatePi x = new calculatePi();
double y =
我正在尝试使用fromIntegral将整数转换为实数类型。其思想是以后使用一个助手方法来比较一个分数的两个实例(不管它们是否相同)。
我阅读了一些与以下方面有关的文件:
fromIntegral :: (Integral a, Num b) => a -> b
realToFrac :: (Real a, Fractional b) => a -> b
我遇到困难的地方是获取这个概念并实现一个助手方法,该方法使用带有分数(分子和分母)的Num数据类型,并返回我认为是实数类型的值。以下是我迄今所做的工作:
data Num = Fraction {numerator :
可以理解的是:
public int divide() {
return 23/4; /* gives 5 , implicitly typecasting 5.75 to 5 ,due to 23 and 4 being
both integers ,at least I think this is */
}
而且,
public double divide() {
return 23.0/4.0; /*gives 5.75 , since it takes 23.0 and 4.0 to be float and not int*/