c# - 用 C# 计算时,这个公式有什么问题?
问题描述
我需要根据我在那里检查的公式计算一个值,正如我们在这个屏幕截图中看到的那样:
我在我的 C# 应用程序中尝试过这个等式,但我没有得到预期值。
例如,我创建了一个基本的控制台应用程序:
public static void Calculate()
{
var values = new double[] { 1, 0.75, 0.5, 0.25, 0};
// y = - ((4/3) * x^3) + (3 * x^2) - ((2/3) * x)
foreach (var value in values)
{
var calcul1 = - ((4 / 3) * Math.Pow(value, 3))
+ (3 * Math.Pow(value, 2))
- ((2 / 3) * value);
var calcul2 = ((-4 / 3) * (value * value * value))
+ (3 * (value * value))
+ ((-2 / 3) * value);
Console.WriteLine($"value: {value} - calcul1: {calcul1} / calcul2: {calcul2}");
}
}
我得到了这些结果,与预期结果不接近:
value: 1 - calcul1: 2 / calcul2: 2
value: 0.75 - calcul1: 1.265625 / calcul2: 1.265625
value: 0.5 - calcul1: 0.625 / calcul2: 0.625
value: 0.25 - calcul1: 0.171875 / calcul2: 0.171875
value: 0 - calcul1: 0 / calcul2: 0
怎么了?跟使用有关系double
吗?
解决方案
我重构了您的代码以获得正确的值。如果在没有显式转换的情况下执行除法计算 c# 隐式转换为整数,丢弃小数部分:
public static void Calculate()
{
var values = new double[] { 1, 0.75, 0.5, 0.25, 0};
// y = - ((4/3) * x^3) + (3 * x^2) - ((2/3) * x)
foreach (var value in values)
{
double firstFraction = (double)4/3;
double secondFraction = (double)2/3;
var calcul1 = - (firstFraction * Math.Pow(value, 3))
+ (3 * Math.Pow(value, 2))
- (secondFraction * value);
var calcul2 = ((firstFraction*-1) * (value * value * value))
+ (3 * (value * value))
+ ((secondFraction*-1) * value);
Console.WriteLine($"value: {value} - calcul1: {calcul1} / calcul2: {calcul2}");
}
}
推荐阅读
- reactjs - 如何使用 react 和 react-router 构建 CRUD 文件结构
- javascript - 类绑定始终处于活动状态
- vbscript - 需要去除 CSV 文件中的无效字符
- ansible - Ansible 在单个邮件中附加多个文件
- java - 使用 JPA 和 derby 数据库启动我的 Spring Boot 应用程序时找不到表错误
- python - 在 Pandas Dataframe 中对数据进行分组和有条件地转换数据的最简洁方法是什么?
- python-3.x - 给定数据框中所有列值的总和,并在新数据框中显示输出
- android - Android - 使用 AppCompatActivity 时出现 java.lang.NoClassDefFoundError
- sql - Oracle 显示应用程序对数据库运行的所有 sql 查询
- c++ - 标识符“DDRB”未定义 - VS 代码/Visual Studio