整数除法?
Integer Division?
关于下面显示的代码:
#include <cmath>
int main()
{
const int n = 10000;
const int K = 10;
double* matrix = new double[n * n];
for(int k = 0; k < K; ++k) {
for(int j = 0; j < n; ++j) {
for(int i = 0; i < n; ++i) {
double ai = (double)i/double(n);
double aj = (double)i/double(n);
matrix[i * n + j] += pow(n, (double)k / K) / exp((double)k / K) * pow(sin(ai),2) * pow(sin(aj),2);
}
}
}
}
是这样的线路
double ai = (double)i/double(n);
double aj = (double)i/double(n);
被定义是因为我们想要浮点除法而不是整数除法?
此外,为什么操作数会按原样转换,即 (double)i/double(n) 而不是 double(i)/double(n)?
是的。实际上,只转换一个操作数就足够了,但有些程序员更喜欢转换所有操作数以保持一致性和更清晰。
是的,因为如果 i 和 n 是两个整数,如下所示:
int i = ...;
int n = ...;
double ai = i/n
这将是一个整数除法。假设 i=5 和 n=9,即使 ai 是双精度数,它最终也会以 0 作为结果。
您可以转换 i 或 n 来告诉编译器您想要一个浮点数除法。
关于下面显示的代码:
#include <cmath>
int main()
{
const int n = 10000;
const int K = 10;
double* matrix = new double[n * n];
for(int k = 0; k < K; ++k) {
for(int j = 0; j < n; ++j) {
for(int i = 0; i < n; ++i) {
double ai = (double)i/double(n);
double aj = (double)i/double(n);
matrix[i * n + j] += pow(n, (double)k / K) / exp((double)k / K) * pow(sin(ai),2) * pow(sin(aj),2);
}
}
}
}
是这样的线路
double ai = (double)i/double(n);
double aj = (double)i/double(n);
被定义是因为我们想要浮点除法而不是整数除法?
此外,为什么操作数会按原样转换,即 (double)i/double(n) 而不是 double(i)/double(n)?
是的。实际上,只转换一个操作数就足够了,但有些程序员更喜欢转换所有操作数以保持一致性和更清晰。
是的,因为如果 i 和 n 是两个整数,如下所示:
int i = ...;
int n = ...;
double ai = i/n
这将是一个整数除法。假设 i=5 和 n=9,即使 ai 是双精度数,它最终也会以 0 作为结果。
您可以转换 i 或 n 来告诉编译器您想要一个浮点数除法。