标签: rounding

在 fortran 中将 Double 转换为 Real 时出现舍入错误

我正在尝试将双精度数转换为实数以进行某些操作,但我注意到一个错误。我有一个用于读取目的的宏,一个short是 4 个字节,一个long是 8 个字节。

这是执行代码:

print*, x, real(x, kind=short) 
print*, x*2.0, real(x*2.0, kind=short) 

print*, real( real(x, kind=short), kind=long) 
print*, real( real(x*2.0, kind=short), kind=long)
Run Code Online (Sandbox Code Playgroud)

这打印出:

173.43304556187957 173.433044 
346.86609112375913 346.866089

173.43304443359375 
346.86608886718750 
Run Code Online (Sandbox Code Playgroud)

那么首先为什么我在转换为实数后还有任何值然后又返回?难道不应该是这样的吗173.43304400000000?为什么当我转换它们时我的价值观会发生变化?我怎样才能改变这一点?

有关信息,fortran 2003,用 gfortran 编译,但我认为 ifort 也有同样的问题。

谢谢你!

floating-point fortran rounding-error rounding type-conversion

0
推荐指数
1
解决办法
232
查看次数

我似乎无法使用 set precision c++ 正确获得小数位数

我目前正在研究子例程/子程序或任何你用英语称呼它们的东西,在我试图解决的这个特定作业中,我必须计算两个单词的平均长度。

\n
void Length(string const text_1,\n            string const text_2,\n            int & total_length,\n            double & mean_length)\n{\n    total_length = text_1.length() + text_2.length();\n    mean_length = static_cast<double>(total_length) / 2;\n}\n\nvoid Length_Program(int val)\n{\n    string text_1;\n    string text_2;\n    int total_length{};\n    double mean_length{};\n\n    cout << "Mata in tv\xc3\xa5 ord: ";\n    cin >> text_1 >> text_2;\n    cout << "Totall\xc3\xa4ngd: ";\n    Length(text_1, text_2, total_length, mean_length);\n    cout << total_length << endl;\n    cout << "Medell\xc3\xa4ngd: " << fixed << setprecision(1) << mean_length;\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我已将精度设置为 set precision(1),我假设它只会写一位小数,但我一直得到两位小数。\n我的例子是: abcd E\nit 应该说它是 2.5 个单词的平均值,但它说 2.51一些原因。有人可以帮助我理解我做错了什么吗? …

c++ decimal rounding iomanip

0
推荐指数
1
解决办法
46
查看次数

使用BigDecimal进行奇怪的舍入行为?

什么会打印到控制台,为什么?

1.

BigDecimal BigDecimalNum = new BigDecimal("0.0774");
System.out.println(BigDecimalNum.doubleValue() * 100.00);
Run Code Online (Sandbox Code Playgroud)

2.

BigDecimal BigDecimalNum2 = new BigDecimal("0.0774");   
System.out.println(BigDecimalNum2.multiply(new BigDecimal("100.00")));
Run Code Online (Sandbox Code Playgroud)

java rounding bigdecimal

-1
推荐指数
1
解决办法
431
查看次数

Fortran数字格式

我使用的是英特尔®VisualFortran编译器专业版11.1,当我运行此代码时

program Console1
implicit none

real(8), parameter:: iterations = 1000.d0
real(8), parameter:: maximum = 0.02d0

integer, parameter:: outfile=1

real(8) force, dforce
integer i

dforce = maximum/iterations
force = 0.d0

open (unit=outfile,file="results.txt",action="write",status="replace")
do i=0,int(iterations)
    write(outfile, *) force
    force = force+dforce
enddo
close(outfile)

endprogram
Run Code Online (Sandbox Code Playgroud)

文件results.txt是乱七八糟的,最终的数字是1.999999999999952E-002而不是2.d-2

我做错了什么?谢谢!

double fortran loops rounding

-1
推荐指数
1
解决办法
761
查看次数

在Sql Server 2008中舍入

我想在sql server中使用ROUND十进制值,如果值为1.1则结果应为2(next value).如何在sql server中执行,任何内置方法是否存在或者我想手动执行?

编辑:

如果任何值是在十进制位置的der,那么结果也应该是Next integer Value

请帮忙

rounding sql-server-2008

-1
推荐指数
1
解决办法
538
查看次数

Java双神秘舍入

我有这个代码:

package picalculator;

//import java.util.Scanner;

public class PiCalculator {

static int odd=1;

public static void main(String[] args) {

    calculatePi();

}
public static void calculatePi() {
    int counter=0;
    double pi=4.0;

    int num[];

    num = new int[20];

    num[0] = generateOdd();
    num[1] = generateOdd();
    num[2] = generateOdd();
    num[3] = generateOdd();
    num[4] = generateOdd();
    num[5] = generateOdd();
    num[6] = generateOdd();
    num[7] = generateOdd();
    num[8] = generateOdd();
    num[9] = generateOdd();
    num[10] = generateOdd();
    num[11] = generateOdd();
    num[12] = generateOdd();
    num[13] = generateOdd();
    num[14] = generateOdd(); …
Run Code Online (Sandbox Code Playgroud)

java double integer rounding

-1
推荐指数
1
解决办法
292
查看次数

C++舍入错误

可能重复:
C中整数除法的行为是什么?

为什么这行代码没有返回任何内容?

float i = 10/3;
if (i>3) cout << i;
Run Code Online (Sandbox Code Playgroud)

如果有帮助,请使用CodeBlocks编译器.

c++ math rounding

-1
推荐指数
1
解决办法
178
查看次数

奇怪的数学与舍入和乘法

我有一个奇怪的问题.我正在从网络音频API中获取数字,我得到的是一个常量列表:

3.1051260268969075e-28等

我想围绕这个数字,但使用:

Math.round(magAmount);
Run Code Online (Sandbox Code Playgroud)

始终返回0. magAmount是我存储数字的变量.另一个奇怪的是,如果我将数字乘以5,我得到的值低于原始值,在本例中为1.5525630134484537e-27.

有任何想法吗?

谢谢.

javascript math rounding

-1
推荐指数
1
解决办法
121
查看次数

如何将数字向上舍入为2位小数

我正在尝试使用C#对数字进行舍入,以便它总是向下一个数字舍入.例如:

0.409 -> 0.41
0.401 -> 0.41
0.414 -> 0.42
0.499 -> 0.50
0.433 -> 0.44
Run Code Online (Sandbox Code Playgroud)

有没有办法使用.NET内置函数执行此操作?

c# numbers rounding

-1
推荐指数
1
解决办法
230
查看次数

如何自定义数字舍入

我正试图找到一种在Rails中绕钱对象的方法.我想要对这样的数字进行舍入:

227493 -> 227500
279992 -> 280000
346824 -> 346900
455318 -> 455400
Run Code Online (Sandbox Code Playgroud)

我想将最后三位数字舍入到下一个数字.

有谁知道如何做到这一点?

ruby rounding

-1
推荐指数
1
解决办法
101
查看次数