我有一个程序,读取5个整数,并使用这些数字给出各种计算的结果.我在计算几何平均数时遇到了特别的麻烦.我知道你应该将这些数字相乘并取结果的第n个根.
我的代码如下(假设所有#includes和main方法都是正确的.):
int num1, num2, num3, num4, num5;
cout << "Enter five integers: \n";
cin >> num1 >> num2 >> num3 >> num4 >> num5;
double gMean = pow((num1 * num2 * num3 * num4 * num5), (1.0/5.0));
cout << "Geometric mean = " << gMean << endl;
Run Code Online (Sandbox Code Playgroud)
此代码适用于较小的数字,例如1,2,3,4,5,但是当我输入大数字时,它会给我nan作为答案.
我需要在其中工作的数字是:85,43,95,100和78
我的问题是:为什么当放入较大的数字时,pow()函数会给我nan作为答案,但是当输入小数字时返回正确的答案?
编辑:第一个问题回答.既然我知道我有溢出问题,我该如何解决呢?
我正在尝试使用 LiveData 从本地数据库加载数据列表。
视图.xml
... // constraint layout surrounds this
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView_cities"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp" />
Run Code Online (Sandbox Code Playgroud)
这是我在片段中设置回收器视图的方法:
val citiesAdapter = CitiesAdapter(cityRepository)
with(view.recyclerView_cities) {
layoutManager = LinearLayoutManager(activity)
setHasFixedSize(true)
adapter = citiesAdapter
}
cityRepository.getAllCities().observe(this, Observer { list ->
citiesAdapter.submitList(list)
})
Run Code Online (Sandbox Code Playgroud)
适配器:
class CitiesAdapter(private val repository: CityRepository) : ListAdapter<City, CitiesAdapter.CardViewHolder>(CityCallback()) {
class CityCallback: DiffUtil.ItemCallback<City>() {
override fun areItemsTheSame(oldItem: City, newItem: City): Boolean {
return oldItem.city == newItem.city && oldItem.stateId == newItem.stateId
}
override fun areContentsTheSame(oldItem: City, newItem: City): Boolean {
return …Run Code Online (Sandbox Code Playgroud)