我正在尝试将双精度数转换为实数以进行某些操作,但我注意到一个错误。我有一个用于读取目的的宏,一个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
我目前正在研究子例程/子程序或任何你用英语称呼它们的东西,在我试图解决的这个特定作业中,我必须计算两个单词的平均长度。
\nvoid 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}\nRun Code Online (Sandbox Code Playgroud)\n我已将精度设置为 set precision(1),我假设它只会写一位小数,但我一直得到两位小数。\n我的例子是: abcd E\nit 应该说它是 2.5 个单词的平均值,但它说 2.51一些原因。有人可以帮助我理解我做错了什么吗? …
什么会打印到控制台,为什么?
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) 我使用的是英特尔®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
我做错了什么?谢谢!
我想在sql server中使用ROUND十进制值,如果值为1.1则结果应为2(next value).如何在sql server中执行,任何内置方法是否存在或者我想手动执行?
编辑:
如果任何值是在十进制位置的der,那么结果也应该是Next integer Value
请帮忙
我有这个代码:
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) 可能重复:
C中整数除法的行为是什么?
为什么这行代码没有返回任何内容?
float i = 10/3;
if (i>3) cout << i;
Run Code Online (Sandbox Code Playgroud)
如果有帮助,请使用CodeBlocks编译器.
我有一个奇怪的问题.我正在从网络音频API中获取数字,我得到的是一个常量列表:
3.1051260268969075e-28等
我想围绕这个数字,但使用:
Math.round(magAmount);
Run Code Online (Sandbox Code Playgroud)
始终返回0. magAmount是我存储数字的变量.另一个奇怪的是,如果我将数字乘以5,我得到的值低于原始值,在本例中为1.5525630134484537e-27.
有任何想法吗?
谢谢.
我正在尝试使用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内置函数执行此操作?
我正试图找到一种在Rails中绕钱对象的方法.我想要对这样的数字进行舍入:
227493 -> 227500
279992 -> 280000
346824 -> 346900
455318 -> 455400
Run Code Online (Sandbox Code Playgroud)
我想将最后三位数字舍入到下一个数字.
有谁知道如何做到这一点?