我正在使用C++中的OpenMP编写并行程序.
我想控制程序中使用的线程数omp_set_num_threads(),但它不起作用.
#include <iostream>
#include <omp.h>
#include "mpi.h"
using namespace std;
int myrank;
int groupsize;
double sum;
double t1,t2;
int n = 10000000;
int main(int argc, char *argv[])
{
MPI_Init( &argc, &argv);
MPI_Comm_rank( MPI_COMM_WORLD, &myrank );
MPI_Comm_size(MPI_COMM_WORLD,&groupsize);
omp_set_num_threads(4);
sum = 0;
#pragma omp for reduction(+:sum)
for (int i = 0; i < n; i++)
sum+= i/(n/10);
cout<<"sum="<<sum<<endl;
cout<<"threads="<<omp_get_num_threads()<<endl;
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该方案产出:
sum = 4.5e+007
threads=1
Run Code Online (Sandbox Code Playgroud)
如何控制线程数?
如何转换[12 25 34 466 55]为字符串数组['12' '25' '34' '466' '55']?我知道的转换函数将该数组转换为表示整个数组的一个字符串.
客户有一个简单的增加订单号(1,2,3 ......).他希望最终用户收到8位或9位数字(仅数字 - 无字符)"随机"数字.显然,这个"随机"数字实际上必须是唯一且可逆的(它实际上是对actualOrderNumber的加密).
我的第一个想法是只是洗牌一些.当我向客户展示一个样本序列时,他抱怨随后的obfuscOrderNumbers正在增加,直到它们达到"shuffle"点(低位比特发挥作用的点).他希望obfuscOrderNumbers尽可能随机看似.
我的下一个想法是确定性地播种线性同余伪随机数生成器,然后获取actualOrderNumber值.但在这种情况下,我需要担心碰撞 - 客户想要一种保证不会在至少10 ^ 7个周期内发生碰撞的算法.
我的第三个想法是"呃,只是对加密的东西进行加密",但如果我使用股票加密库,我必须对其进行后期处理才能获得8位或9位数的要求.
我的第四个想法是将actualOrderNumber的位解释为格雷编码的整数并返回.
我的第五个问题是:"我可能会过度思考这个问题.我敢打赌,StackOverflow上的某个人可以用几行代码完成这项工作."
首先,让我说,这不是功课(我是一个A-Level的学生,这是没有接近我们解决问题(这是路难)),但更多的问题,我想苏斯出来的改善我的编程逻辑.
我想到了一个有一个随机整数数组的场景,比如说10个整数.用户将输入他想要计数的数字,算法将尝试计算出该总和所需的数字.例如,如果我想从这个整数数组中得到总和44:
myIntegers = array(1, 5, 9, 3, 7, 12, 36, 22, 19, 63);
Run Code Online (Sandbox Code Playgroud)
输出将是:
36 + 3 + 5 = 44
Run Code Online (Sandbox Code Playgroud)
或类似的规定.我希望我能说清楚.作为一个额外的好处,我想让算法选择尽可能少的数字来产生所需的总和,或者如果不能用所提供的数字进行求和则给出错误.
我想过使用递归和遍历数组,反复添加数字直到满足或超过总和.但是我无法理解的是,如果算法超过总和并且需要选择从阵列中选择的数字,该怎么办.
我不是在寻找完整的代码,也不是一个完整的算法,我只是希望你对我应该如何处理这个问题提出意见,也许还会分享一些提示或其他内容.我今晚可能会开始研究这个问题.:P
正如我所说,不是功课.只是我想要做一些更先进的事情.
感谢您提供的任何帮助.:)
我试图从我的xml中获取一个数字的值到2 dec的位置.
XML:<Quantity>0.0050</Quantity>
XSL:<xsl:value-of select="format-number($quantity, '####0.00')" />
但是,XSL似乎0.00在页面的一个区域和另一个区域中存在此值和输出的问题0.01.当然,在这种情况下,有利于0.01 所有领域的产出.
另一个区域具有4.221XSL输出的价值4.23.
我确实意识到,format-number作为一种方法,将数字转换为字符串.
不知道如何解决这个问题.
编辑:
好了一下,我发现这有效:
<xsl:value-of select='format-number( round(100*$quantity) div 100 ,"##0.00" )' />
Run Code Online (Sandbox Code Playgroud)
通过这个网站
正如这个家伙提到的那样,XSL使用"银行家四舍五入"来舍入到偶数而不是更大的数字.
解决方案似乎不太优雅,意味着为已经庞大而复杂的XSL文件添加大量额外功能.当然我错过了什么?
我有一个号码n,我想找到三个号码,其产品n尽可能彼此接近.也就是说,如果n = 12那时我想得到3,2,2结果,而不是6,1,2.
想到它的另一种方法是,如果n是长方体的体积,那么我想找到两侧的长度,以便使长方体尽可能像立方体(即,长度尽可能相似).这些数字必须是整数.
我知道不太可能有一个完美的解决方案,而且我很乐意使用能够在大多数时候给出一个好答案的东西,但我想不出去想出这个算法.有任何想法吗?
我一直在调查java.lang.Long类源代码.
考虑一下:
public final class Long extends Number implements Comparable<Long> {
....
private final long value;
....
public long longValue() {
return (long)value;
}
....
}
Run Code Online (Sandbox Code Playgroud)
什么是投理由long来long?
为什么不在这种情况下将序列化(?)重新归类为Number类?
PS1 源代码链接
我有这些可能的解释:
PS2
我的java版本 - 1.7.0_45-b18
PS3 仅供参考:
Integer:
public final class Integer extends Number implements Comparable<Integer> {
....
private final int value;
....
public int intValue() {
return value;
}
....
}
Run Code Online (Sandbox Code Playgroud)
Short:
public final class Short …Run Code Online (Sandbox Code Playgroud) 我似乎不知道如何Integer.MAX_VALUE和Integer.MIN_VALUE找到在一个数组的最小值和最大值的帮助.
我理解这个方法(下面的伪代码)在找到最小值和最大值时是如何工作的:
max = A[0], min = A[0]
for each i in A
if A[i] > max then max = A[i]
if A[i] < min then min = A[i]
Run Code Online (Sandbox Code Playgroud)
但至于这种方法,我不明白的目的Integer.MAX_VALUE和Integer.MIN_VALUE:
import java.util.Scanner;
class MyClass {
public static void main(String[] args) {
int[] numbers; // declaring the data type of numbers
numbers = new int[3]; //assigning the number of values numbers will contain
int smallest = Integer.MAX_VALUE, largest = Integer.MIN_VALUE;
Scanner input = …Run Code Online (Sandbox Code Playgroud) 我有这个JavaScript函数:
Contrl.prototype.EvaluateStatement = function(acVal, cfVal) {
var cv = parseFloat(cfVal).toFixed(2);
var av = parseFloat(acVal).toFixed(2);
if( av < cv) // do some thing
}
Run Code Online (Sandbox Code Playgroud)
当我比较浮点数av=7.00和cv=12.00结果7.00<12.00是false!
有什么想法吗?
我正在寻找一个合理快速的算法来计算OEIS序列A002845的术语.让我在这里重申它的定义.
设^表示取幂运算符.考虑具有n 2的形式2 ^ 2 ^ ... ^ 2的表达式,其中括号以所有可能的方式插入(可能的括号的数量由加泰罗尼亚数字给出).这些表达式中的一些将具有相同的值,例如(2 ^ 2)^ 2 = 2 ^(2 ^ 2).我们感兴趣的是给定n的不同值的数量.
通过直接计算这些表达式,有明显的暴力解决方案,但很明显,即使对于相对较小的n,所需的时间和空间也会迅速超过所有合理的限制.我对这个问题的多项式时间解决方案很感兴趣.
numbers ×10
algorithm ×3
java ×2
math ×2
arrays ×1
c++ ×1
comparison ×1
encoding ×1
encryption ×1
exponent ×1
formatting ×1
javascript ×1
long-integer ×1
matlab ×1
np-complete ×1
openmp ×1
random ×1
rounding ×1
sequence ×1
set ×1
string ×1
xml ×1
xslt ×1