相关疑难解决方法(0)

为什么C中的%f在输出中增加了3个随机数?

#include <stdio.h>
void main() {
    float num = 546.327;
    printf("the number is %f\n",num);
    enter code here

}
Run Code Online (Sandbox Code Playgroud)

输出为546.327026.当我尝试不同的数字时,它总是在点后打印6个数字,而后3个是随机的.

c

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

Python:如何保持 sqrt() 平方的准确性?

我认为这是一个受欢迎的问题,但我找不到答案:

当一个整数的平方根被平方时,我希望结果是一个整数,但我得到以下结果:

from math import sqrt
from decimal import Decimal 

a = 5
b = sqrt(Decimal(a))
c = 2 * b ** 2
print(a, c)
if c.is_integer():
    print('c is integer')
    do something ...
else:
    print('c is NOT integer')
Run Code Online (Sandbox Code Playgroud)

结果:

5 10.000000000000002
c is NOT integer
Run Code Online (Sandbox Code Playgroud)

我也试过不使用 decimal.Decimal() 但它也不起作用。解决这个问题的最佳方法是什么?上面的代码针对这个问题进行了简化,但如果可能的话,我想要一个通用的解决方案。我正在使用 Python 3.5。

python

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

什么时候浮点确切?

我的问题被标记为/sf/answers/1541674291/的副本,但它不是重复的.这个问题涉及不精确代表的情况,而我的问题是关于特殊情况下的确切表示

在Python 3会话中:

>>> 0.1*3/3
0.10000000000000002
>>> 12.34567
12.34567
Run Code Online (Sandbox Code Playgroud)

第一次计算产生不准确的结果.(我明白为什么:这是因为浮点数是圆的.)

但是第二次计算(从小数部分切换到二进制FP然后返回)会产生精确的结果.

我的问题是为什么第二个结果(以及许多类似的"计算"仅涉及一个没有算术运算的FP数)是精确的(与Python会话中输入的相同)?

另外:两个小数的总和的准确性是什么(其指数差异不大)?

floating-point precision floating-accuracy

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

Golang不增加0.1

遵循Go代码

for i := 0.0 ; i < 5 ; i+=0.1 { fmt.Printf("%v, ", i) }

导致此(部分)输出

0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5
Run Code Online (Sandbox Code Playgroud)

为什么我得到0.30000000000000004而不是0.3?

go

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

为什么 dpes 这段代码打印“False”?为什么它不打印“True”?

当我运行此代码时,它会打印False. 我不清楚

#include <stdio.h>
    int main()
    {
        float f = 0.1;
        if (f == 0.1)
            printf("True");
        else
            printf("False");
    }
Run Code Online (Sandbox Code Playgroud)

我希望这段代码打印出来True而不是False

c floating-point precision

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

Ruby 四舍五入和十进制数的格式

我已经看过了:为什么十进制数不能用二进制精确表示?为什么是浮点数不准确?

我的问题是,当我使用 ruby​​ 对浮点数进行舍入和格式化时,结果仍然与进行数学运算的结果不同。下面是一个例子:

编辑 2

[28] pry(main)> #####################################
[29] pry(main)> # test one
[30] pry(main)> #####################################
[31] pry(main)> foo = (6.0135 * (650000 / 1000)) 
             => 3908.7749999999996
[32] pry(main)> foo = '%.2f' % foo.round(2)
             => "3908.77"
[33] pry(main)> # should be 3908.78

[36] pry(main)> #####################################
[37] pry(main)> # test two
[38] pry(main)> #####################################
[39] pry(main)> foo = 650000 / 1000
             => 650
[40] pry(main)> foo = foo * 6.0135
             => 3908.7749999999996
[41] pry(main)> foo = '%.2f' …
Run Code Online (Sandbox Code Playgroud)

ruby floating-point ruby-on-rails rounding

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

为什么pow(10,2)99而不是100的结果?

我正在用c制作一个新项目,功能"不起作用".我该怎么做才能解决?

它的功能实际为2到10的幂,但10的功率为1

#include <stdio.h>
#include <math.h>

int main(){
    int res=2;
    int base=10;
    int exp=2;
    res= pow(base,exp);
    printf("%d",res);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为100,但输出为99

c

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

在Ruby中查找对象类型的函数

我想知道是否有任何红宝石函数或方法来找出对象(类型IntegerStringSymbol,等)。

ruby

-3
推荐指数
2
解决办法
1万
查看次数

为什么numpy的正弦函数在某些点上如此不准确?

我刚检查过它numpysine功能.显然,它会在pi周围产生非常不准确的结果.

In [26]: import numpy as np

In [27]: np.sin(np.pi)
Out[27]: 1.2246467991473532e-16
Run Code Online (Sandbox Code Playgroud)

预期的结果是0.为什么numpy那么不准确?

在某种程度上,我不确定将计算结果视为不准确是否可接受:它的绝对误差在一个机器epsilon(对于binary64)内,而相对误差是+inf- 我觉得有些困惑的原因.任何的想法?

[编辑]我完全理解浮点计算可能不准确.但是大多数浮点库可以设法在一小部分误差范围内提供结果.这里,相对误差是+ inf,这似乎是不可接受的.想象一下,我们想要计算

1/(1e-16 + sin(pi)) 
Run Code Online (Sandbox Code Playgroud)

如果我们使用numpy的实现,结果将是灾难性的错误.

python floating-point numpy

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

反序列化JSON数字返回错误的值

我想json strings用go语言反序列化。不同键的值类型不同。例如string {\"category\":\"6\",\"cid\":2511993760745787586}category类型是stringcid类型是int64

我的代码如下:

func main() {
    oriInfo := make([]interface{}, 0)
    pickled := "[{\"category\":\"6\",\"cid\":2511993760745787586},{\"category\":\"5\",\"cid\":2504429915944783937}]"
    err := json.Unmarshal([]byte(pickled), &oriInfo)
    if err != nil {
        fmt.Println(err)
        return
    }
    all := make([]map[string]interface{}, 0, len(oriInfo))
    for _, val := range oriInfo {
        m := make(map[string]interface{})
        for k, v := range val.(map[string]interface{}) {
            switch k {
            case "category":
                m[k] = v.(string)
            case "cid":
                m[k] = int64(v.(float64))
            }
        }
        all = append(all, m)
    } …
Run Code Online (Sandbox Code Playgroud)

json go deserialization

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