java - Android Studio:来自 org.apache.commons.math4.stat.descriptive 的 getStandardDeviation() 方法没有给我 Std 的确切值
问题描述
我想知道是否有人可以帮助我一点。我正在开发一个从双值列表中提取平均值和标准差的程序。我使用 org.apache.commons.math4.stat.descriptive 来执行此操作,该库有一个名为 GetStandardDeviation() 的方法,它为您提供列表的标准,但是当我手动计算此标准时,我没有得到与方法相同的值返回我。这是我的代码:
public class PDC extends AppCompatActivity {
private DescriptiveStatistics stats = new DescriptiveStatistics();
private double media;
private double dvt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pdc);
double K = 0.00;
Bundle extras;
extras = getIntent().getExtras();
assert extras != null;
String nombrelista = extras.getString("nombrelista");
ArrayList<String> listDatos = extras.getStringArrayList("listDatos");
assert listDatos != null;
if(listDatos.size()==9){ K = 1.92;}
if(listDatos.size()==10){K = 1.96;}
if(listDatos.size()==11){K = 2.00;}
if(listDatos.size()==12){K = 2.04;}
if(listDatos.size()==13){K = 2.07;}
if(listDatos.size()==14){K = 2.10;}
//This for parses to double the positions from listdatos Arraylist and put it in the DescriptiveStatistics type variable called "stats"
for (int i = 0; i < listDatos.size(); i++) {
stats.addValue(Double.parseDouble(listDatos.get(i)));
}
// so now, when i have my arraylist saved in "stats" i call getStandardDeviation
media = stats.getMean();
dvt = stats.getStandardDeviation();
int numeroMed = listDatos.size();
double imin = media - (K * dvt);
double imax = media + (K * dvt);
//then i pass all the values to another activity where it shows up in a TextView Field
Intent A = new Intent(this, Resultados.class);
A.putExtra("nombreLista", nombrelista);
A.putExtra("NumeroMedidas", numeroMed);
A.putStringArrayListExtra("listDatos", listDatos);
A.putExtra("Media", media);
A.putExtra("dvt", dvt);
A.putExtra("Imin", imin);
A.putExtra("Imax", imax);
A.putExtra("K",K);
startActivity(A);
}
}
我不确定为什么它不起作用。也许我在通过活动时丢失了一些信息,因为这些值曾经是非常长的数字。
¿ 如果我不使用这个库并设计我自己的方法来做标准偏差会更好吗?
另外,如果您在我的代码中看到要改进的地方,请告诉我,我真的很感激它,因为我对此很陌生。太感谢了!
解决方案
这是 Java 中的精度损失。
可以使用 strictfp 来修改 onCreate 方法,或者把 double 放到 BigDecimal 就可以解决这个问题
推荐阅读
- reactjs - 如何从.Net Core + React将参数传递给HTTP Get方法
- r - 删除最后一个逗号之前的任何文本
- ios - 在循环内设置自动布局约束
- python - 带有熊猫移位的列名
- sql - SQL/teradata 中的内部联接不返回任何内容
- java - 如何构建和部署不同的 jar 并将它们放置在不同的机器中
- javascript - 尝试提取 Photoshop 图层坐标和尺寸
- python - 条形图在 matplotlib 中混淆
- amazon-web-services - 将 AWS 资源从一个账户导出到另一个账户
- reactjs - WASM 反应模块解析失败:未检测到魔术头