关于输出精度的设置(2020.11.29)

C++计算正数序列的调和平均值
该程序采用C++实现,计算输入的一系列正数的调和平均值。通过读取N个正数,计算它们倒数的算术平均数的倒数作为调和平均值,并按要求格式输出结果,确保了数值精度的设置。

@ 调和平均数
N 个正数的算数平均是这些数的和除以 N,它们的调和平均是它们倒数的算数平均的倒数。本题就请你计算给定的一系列正数的调和平均值。
输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (≤1000);第 2 行给出 N 个正数,都在区间 [0.1,100] 内。

输出格式:

在一行中输出给定数列的调和平均值,输出小数点后2位。

输入样例:

8
10 15 12.7 0.3 4 13 1 15.6
输出样例:

1.61

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int N;
	N<=10000;cin>>N;
	double a[1003]={0};
	for(int i=0;i<N;i++)
	{
		cin>>a[i];
	}
	double sum=0;
	for(int i=0;i<N;i++)
	{
		sum+=(1/a[i]);
	}
	double x;
	x=sum/N;
	//cout<<setprecision(3)<<1/x<<endl;此步有问题,详情请看下文
	cout<<setiosflags(ios::fixed)<<setprecision(2)<<1/x<<endl;
	return 0;
}

设置输出精度需要使用

#include<iomanip>

cout<<setprecision(x)<<表达式<<endl;
只有在这项设置后,setprecision才是设置小数的位数。
输出几位小数,x就为几。

在2020.12.27日,我发现我这么表示有问题,对于被误导的兄弟们 ,我表示十分抱歉,下面,我将补全这个输出精度的表示:对于setprecision(x),其表示的是输出的数字的总个数,如对于1.3333,若x设置为2的话,那么它其实输出的是1.3。而如果想控制小数点后面位数的输出的话,则必须加上setiosflags(ios::fixed)与setprecision(x)连用,此时的x才是代表小数点后的数字的个数。

<think>好的,我现在需要处理用户关于Vitis 2020.2中Dhrystone源码解析的请求。首先,用户之前询问了tar打包文件顺序的问题,现在转向了嵌入式开发中的性能基准测试工具Dhrystone,这可能意味着用户在进行嵌入式系统开发,特别是使用Xilinx的工具链,需要优化或评估处理器的性能。 用户的需求是了解Dhrystone在Vitis 2020.2中的源码结构和工作原理。我需要先确认Dhrystone的基本背景,它常用于评估处理器的整数运算性能,是嵌入式领域常见的基准测试程序。用户可能希望理解源码的结构,以便进行定制化修改或优化,或者更好地理解测试结果。 接下来,我需要考虑Vitis 2020.2的具体环境。Xilinx的Vitis是用于FPGA和SoC开发的平台,Dhrystone可能作为示例项目存在,用于评估Zynq或MicroBlaze等处理器的性能。用户可能在使用Xilinx的硬件平台,如Zynq-7000或UltraScale+,需要分析源码以适配自己的硬件或优化性能。 用户的深层需求可能包括:如何编译和运行Dhrystone测试,源码各部分的功能,如何修改测试参数,以及如何解读结果。此外,用户可能遇到性能调优的问题,需要理解Dhrystone的工作原理来有效进行优化。 我需要整理Dhrystone源码的主要组成部分,例如核心算法函数(Proc_1到Proc_8)、全局数据结构(如Record_Type)、计时机制、主函数流程等。同时,需要说明在Vitis中的位置,如何导入项目,以及如何配置和编译。 可能需要注意Dhrystone的移植性,特别是在不同处理器架构上的实现差异,比如在ARM Cortex-A9或RISC-V上的不同表现。此外,Vitis可能提供了特定的编译选项或硬件配置,影响Dhrystone的运行结果,需要提及这些因素。 用户可能对如何验证结果和进行性能分析感兴趣,比如如何计算DMIPS/MHz,以及如何通过修改代码来测试不同优化效果。需要解释关键函数的作用,比如Proc_1中的字符串操作和条件判断,以及全局变量如何影响测试的重复性和准确性。 最后,确保回答结构清晰,分步骤解析源码,提供示例代码片段,并给出实用建议,如如何修改迭代次数、计时方法的选择等。同时,提醒用户注意编译器优化对结果的影响,建议在测试时调整编译选项以反映真实性能。</think>--- ### **Vitis 2020.2 中的 Dhrystone 源码解析** Dhrystone 是一种经典的 **整数运算性能基准测试程序**,广泛用于评估处理器的 DMIPS(Dhrystone MIPS)性能。在 Xilinx Vitis 2020.2 中,Dhrystone 通常作为嵌入式开发(如 Zynq、MicroBlaze 等处理器)的性能测试示例。以下从源码结构、核心算法和关键函数三方面进行解析。 --- #### **一、源码结构与文件说明** 在 Vitis 2020.2 中,Dhrystone 源码通常位于以下路径: ```bash <Xilinx安装目录>/Vitis/2020.2/examples/<platform>/peripheral_tests/dhrystone ``` 主要文件包括: 1. **dhry.h** - 定义全局常量、数据类型和函数原型 - 示例: ```c typedef struct { int EnumVal; char Ch_1_1; } Record_Type; ``` 2. **dhry_1.c** - 包含 **核心算法函数**(如 `Proc_1` 到 `Proc_8`)和全局变量 - 示例:字符串操作、条件分支、函数调用等逻辑 3. **dhry_2.c** - 主函数 `main()` 和计时逻辑 - 初始化数据结构、运行测试循环、计算 DMIPS 值 4. **platform.c / platform.h** - 平台相关代码(如 UART 输出、定时器配置) --- #### **二、核心算法逻辑** Dhrystone 通过 **高频次调用小型函数** 模拟真实工作负载,主要包含以下操作: 1. **字符串处理** ```c strcpy(Ch_2_Ptr_Glob->Ch_Array, Ch_1_Ptr_Glob->Ch_Array); ``` 2. **条件分支** ```c if (Enum_Loc == Ident_1) { Proc_6(Ident_1, &Enum_Loc); } ``` 3. **结构体操作** ```c Next_Record_1->Discr = Ident_1; Next_Record_1->variant.var_1.Int_Comp = 40; ``` 4. **函数调用与递归** ```c Proc_7(Int_1_Loc_1, 10, &Int_2_Loc); ``` --- #### **三、关键函数解析** ##### **1. 主函数 `main()`(dhry_2.c)** - **初始化测试环境**: ```c init_platform(); // 初始化硬件平台(如定时器、串口) ``` - **运行测试循环**: ```c for (Run_Index = 1; Run_Index <= NUMBER_OF_RUNS; Run_Index++) { Proc_0(); // 执行核心测试逻辑 } ``` - **计算性能指标**: ```c printf("DMIPS/MHz: %.2f\n", (User_Time * 1000.0) / ((float)Clocks_Per_Second * HZ)); ``` ##### **2. 核心函数 `Proc_0()`(dhry_1.c)** - **初始化全局数据结构**: ```c Ch_1_Ptr_Glob = (Record_Type *)malloc(sizeof(Record_Type)); Ch_2_Ptr_Glob = (Record_Type *)malloc(sizeof(Record_Type)); ``` - **执行性能测试主体**: ```c for (Int_1_Loc = 0; Int_1_Loc < 100; Int_1_Loc++) { Proc_5(); Proc_4(); Proc_7(10, Int_1_Loc, &Int_2_Loc); } ``` ##### **3. 典型函数 `Proc_1`(dhry_1.c)** - 包含字符串操作和条件判断: ```c void Proc_1(Record_Type *Ptr_Val_Par) { memcpy(Ptr_Val_Par->Ch_Array, "DHRYSTONE", 9); if (Ptr_Val_Par->EnumVal == Ident_1) { Proc_6(Ident_1, &Ptr_Val_Par->EnumVal); } } ``` --- #### **四、性能指标计算** Dhrystone 结果以 **DMIPS/MHz** 表示,计算公式: $$ \text{DMIPS/MHz} = \frac{\text{Dhrystone 迭代次数}}{\text{执行时间(秒)} \times 10^6} $$ 在 Vitis 中,通过系统定时器(如 `XTime_GetTime()`)测量执行时间,并考虑 CPU 主频。 --- #### **五、Vitis 中的调试与优化** 1. **修改迭代次数** 在 `dhry_2.c` 中调整 `NUMBER_OF_RUNS`: ```c #define NUMBER_OF_RUNS 100000 // 增加以提高测试精度 ``` 2. **关闭编译器优化** 在 Vitis 工程属性中设置: ```bash -O0 # 禁用优化以观察原始性能 ``` 3. **硬件计时器配置** 在 `platform.c` 中检查定时器初始化代码,确保与目标板卡匹配。 --- #### **六、示例输出解析** 运行后的典型输出: ```text Dhrystone Benchmark, 100000 runs Execution time: 0.123 seconds DMIPS/MHz: 1.23 ``` - **DMIPS/MHz > 1.0**:表明处理器性能优于参考机型(VAX 11/780) --- ### **总结** Dhrystone 源码通过高频次的结构体操作、函数调用和条件分支,模拟真实应用的整数运算负载。在 Vitis 中分析时需注意: - 编译器优化对结果影响显著 - 定时器精度直接影响 DMIPS 计算 - 硬件平台(如 MicroBlaze vs ARM Cortex-A9)性能差异明显 如需深度定制,可修改 `Proc_*` 函数中的算法或调整全局数据结构复杂度,以匹配特定场景的性能测试需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值