我之前从未使用过漂浮物,而我正在进行的当前项目需要它们.我得到了几年前我学到的奇怪问题,但却忘记了为什么会这样.
乘以或添加浮点数后的结果不是它们应该的结果.
这是我的代码:
void main ()
{
//Example 1 - ERROR
float a=16937.6;
float b=112918;
float total=b+a;
cout<<total<<endl; //Outputs 129896 - rounds up and loses decimal (129855.6)
//Example 2 - Error
float c=247.82;
float d=9995.2;
float total2=c+d;
cout<<total2<<endl; //Outputs 10243 - loses all decimals (10243.02)
system ("pause");
}
Run Code Online (Sandbox Code Playgroud) 我正在计算R中F检验的p值,它似乎无法显示低于1e-16的任何值.例如,对于F值从80到90,自由度1,200:
> 1-pf(80:90,1,200)
[1] 2.220446e-16 2.220446e-16 1.110223e-16 1.110223e-16 0.000000e+00 0.000000e+00 0.000000e+00
[8] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
Run Code Online (Sandbox Code Playgroud)
如何提高pf()函数计算的精度?
a = '60.950'
b = a.to_f
puts a # => 60.950
puts b # => 60.95
Run Code Online (Sandbox Code Playgroud)
我想每次在小数点后显示三位数.我怎么能0在结束时强行b?
如果我在Python 2.7.5控制台中运行以下代码:
>>> import math
>>> math.radians(0.000001)
Run Code Online (Sandbox Code Playgroud)
我明白了
1.7453292519943295e-08
Run Code Online (Sandbox Code Playgroud)
但是,如果我将相同的代码放在一个文件中:
$ cat floatingtest.py
import math
print(math.radians(0.000001))
Run Code Online (Sandbox Code Playgroud)
运行它,我得到:
$ python.exe floatingtest.py
1.74532925199e-08
Run Code Online (Sandbox Code Playgroud)
为什么在脚本中运行代码与在控制台中运行代码时浮点精度的差异?
(Python 3.3似乎没有这个'问题'.两种方式都返回相同的高精度值.)
我在c#return infinity中遇到Math.pow问题,例如:
double a=65;
double b=331;
Console.Write(Math.Pow(a,b));
//but return infinty
Run Code Online (Sandbox Code Playgroud)
但我的电脑计算器不返回65 ^ 331无穷大有实数返回此:1.1866456424809823888425970808655e + 600
我使用强制转换为(长)但结果不同于Windows计算器请我需要变量类型返回相同的窗口计算器
我正在使用FloatToText这种方式:
function ExFloatToStr(Value: Extended): string;
var
Buffer: array[0..63] of Char;
FormatSettings: TFormatSettings;
begin
GetLocaleFormatSettings(GetUserDefaultLCID, FormatSettings);
SetString(Result, Buffer, FloatToText(Buffer, Value, fvExtended, ffGeneral,
18, 0, FormatSettings));
end;
Run Code Online (Sandbox Code Playgroud)
如果我传递给这个函数值9229.99,它返回一个字符串值9229.9900000000016,但它不是我想要的.当我创建一个新项目并在那里复制上面的代码时,它运行良好.它返回9229.99.
他们在不同项目中工作的原因可能是什么?
运行以下代码,我希望收到这样的输出:
Desired output:
Car Hours Charge
1 1.5 2.00
2 4.0 2.50
3 24.0 10.00
Run Code Online (Sandbox Code Playgroud)
但是结果如下:
Actual output:
Car Hours Charge
1 2 2
2 4 2.5
3 2e+01 10
Run Code Online (Sandbox Code Playgroud)
欢迎提供任何可以指导我使用正确的浮点比较和正确使用setprecision的建议。
int main()
{
double hour[3];
double charge[3];
double sum_hour = 0;
double sum_charge = 0;
for (int i = 0; i < 3; i++)
{
cout<<"Enter the hours for car No. "<<i<<": ";
cin>>hour [i];
if (hour [i] <= 3)
{charge [i] = 2.00;}
if …Run Code Online (Sandbox Code Playgroud) 我正在用C ++编写OpenGL渲染器。我希望它尽可能高效,并且每个顶点/法线/ UV tex坐标/切线/等都占用尽可能少的内存。我正在使用索引,线带和风扇。我以为32位浮点数不是必需的,而16位浮点数应该没问题,至少对于其中一些像法线和UV而言。我似乎在任何地方都找不到任何示例。我可以找到“ GL_HALF_FLOAT”的话题,但没有真实的例子。我在正确的轨道上吗?还是不值得一看?如果有人知道这样的示例,他们可以发送源代码链接吗?
当我使用float而不是使用奇怪的输出double
#include <stdio.h>
void main()
{
double p,p1,cost,cost1=30;
for (p = 0.1; p < 10;p=p+0.1)
{
cost = 30-6*p+p*p;
if (cost<cost1)
{
cost1=cost;
p1=p;
}
else
{
break;
}
printf("%lf\t%lf\n",p,cost);
}
printf("%lf\t%lf\n",p1,cost1);
}
Run Code Online (Sandbox Code Playgroud)

按预期输出p= 3;
但是当我使用float输出时有点奇怪.
#include <stdio.h>
void main()
{
float p,p1,cost,cost1=40;
for (p = 0.1; p < 10;p=p+0.1)
{
cost = 30-6*p+p*p;
if (cost<cost1)
{
cost1=cost;
p1=p;
}
else
{
break;
}
printf("%f\t%f\n",p,cost);
}
printf("%f\t%f\n",p1,cost1);
}
Run Code Online (Sandbox Code Playgroud)

为什么p第二种情况下的增量在2.7之后变得奇怪?
我有一个程序,从字符串中读取数字到mpz_t,然后将其转换为mpf_t.尽管从文件中正确读取,但是当我将它们转换为mpf_t时会出现精度损失.代码如下:
#include <gmp.h>
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv) {
char* str = "632512364206354367378453";
mpz_t x;
mpz_init_set_str(x, str, 10);
mpf_t a;
mpf_init(a);
mpf_set_z(a, x);
gmp_printf("mpz_t: %Zd\n", x);
gmp_printf("mpf_t: %Ff\n", a);
}
Run Code Online (Sandbox Code Playgroud)
此示例的输出是:
mpz_t: 632512364206354367378453
mpf_t: 632512364206354367378000.000000
Run Code Online (Sandbox Code Playgroud)
如您所见,最后3位数字不正确.我怎么能避免这个?还有其他功能可以执行此转换吗?
谢谢