首页 \ 问答 \ 为什么浮点数乘以时没有错误?(Why there is no errors while multiplying floating point numbers?)

为什么浮点数乘以时没有错误?(Why there is no errors while multiplying floating point numbers?)

我需要对浮点数学进行一些澄清。

我为学习者写了一些代码:

#include "stdio.h"

int main (int argc, char const *argv[])
{
    int i;
    double a=1.0/10.0;
    double sum=0;

    for(i = 0; i < 10; ++i)
        sum+=a;

    printf("%.17G\n", 10*a );
    printf("%d\n", (10*a == 1.0) );

    printf("%.17G\n", sum );
    printf("%d\n", (sum == 1.0) );

    return 0;
}

它给出的输出是:

    1
    1
    0.99999999999999989
    0

为什么(sum == 1.0) - 是假的是相当可理解的,但为什么乘法给出正确答案而没有错误?

谢谢。


I need some clearification about floating point math.

I have wrote some code for the learning purpouses:

#include "stdio.h"

int main (int argc, char const *argv[])
{
    int i;
    double a=1.0/10.0;
    double sum=0;

    for(i = 0; i < 10; ++i)
        sum+=a;

    printf("%.17G\n", 10*a );
    printf("%d\n", (10*a == 1.0) );

    printf("%.17G\n", sum );
    printf("%d\n", (sum == 1.0) );

    return 0;
}

and the output it gives is:

    1
    1
    0.99999999999999989
    0

Why (sum == 1.0) - is false is pretty understandabale, but why multiplying gives the right answer without the error?

Thanks.


原文:https://stackoverflow.com/questions/21654098
更新时间:2023-01-08 12:01

最满意答案

如果适合,你可以试试这个吗?

SELECT
array_agg(t2.name),
array_agg(t1.playerid),
date (t1.starttime),
Count(t1.starttime) as "# Plays",
Count(distinct(t1.playerid)) as "# Stores"

FROM
public.billing t1 JOIN public.medias t2 on t1.mediaitemid = t2.id 
JOIN public.players t3 on t1.playerid = t3.id 

WHERE
t3.store in  ('0038','3285') and
t2.name LIKE any (array['COMM_7032%']) and
t1.starttime >= date('2017-04-26') and 
t1.starttime < date('2017-05-01') and
t1.channelname = 'myNetwork'

GROUP BY
date (t1.starttime)

ORDER BY
date (t1.starttime)

Could you please try this one if it fits:

SELECT
array_agg(t2.name),
array_agg(t1.playerid),
date (t1.starttime),
Count(t1.starttime) as "# Plays",
Count(distinct(t1.playerid)) as "# Stores"

FROM
public.billing t1 JOIN public.medias t2 on t1.mediaitemid = t2.id 
JOIN public.players t3 on t1.playerid = t3.id 

WHERE
t3.store in  ('0038','3285') and
t2.name LIKE any (array['COMM_7032%']) and
t1.starttime >= date('2017-04-26') and 
t1.starttime < date('2017-05-01') and
t1.channelname = 'myNetwork'

GROUP BY
date (t1.starttime)

ORDER BY
date (t1.starttime)

相关问答

更多
  • 你不能使用变量来代替这样的标识符。 你需要用动态查询来完成。 它看起来像这样: EXECUTE 'SELECT * FROM ' || quote_ident(tname) || ' WHERE ' || quote_ident(cname) || ' NOT IN (''AK'',''CK'');' INTO result_var; 如果您使用PostgreSQL 9.1或更高版本,则可以使用format()函数 ,这使得构建该字符串变得更加容易。 You cannot use a v ...
  • 问题不在UserService中,它在我的PGService类中。 这是: public class PGService { private final Sql2o connectionPool; public PGService() throws ConfigurationException, IOException { Config cfg = loadConfig("dbconfig.json"); if (cfg == null) { ...
  • 复制命令是执行此操作的最佳方法: http://www.postgresql.org/docs/9.3/static/sql-copy.html COPY table_name [(column_name [,...])] FROM {'filename'| PROGRAM'命令'| STDIN} [[WITH](选项[,...])] COPY {table_name [(column_name [,...])] | (查询)} TO {'文件名'| PROGRAM'命令'| STDOUT} [[WITH] ...
  • 您有一个典型的多对多关系的表结构。 你可以得到子服务列表: SELECT ssvc.subservice_name FROM service svc, service_subservice ss, subservice ssvc WHERE svc.id = ss.service_id AND ssvc.id = ss.subservice_id AND svc.id = ? 但是,如果要建模一对多关系,则应使用更简单的模式: 服务(就像你拥有的那样) 子服务: CREATE TABLE subservi ...
  • 我没有运行代码,但我认为&&操作符可以实现你想要的功能: scope :with_tags, ->(tags) { where("tags && ARRAY[?]", tags) } I'm not running the code but I think the && operator does what you want: scope :with_tags, ->(tags) { where("tags && ARRAY[?]", tags) }
  • 假设: 变量@product ,其id = 71 变量@total_price ,其值为40 一个名为current_user的变量/函数 OrderItem belongs_to:order OrderItem belongs_to:orderable,polymorphic:true Order belongs_to:用户 然后我相信它会是这样的: Order. joins(:items). where(items: {id: OrderItem.where(orderable: @produc ...
  • 如果适合,你可以试试这个吗? SELECT array_agg(t2.name), array_agg(t1.playerid), date (t1.starttime), Count(t1.starttime) as "# Plays", Count(distinct(t1.playerid)) as "# Stores" FROM public.billing t1 JOIN public.medias t2 on t1.mediaitemid = t2.id JOIN public.players ...
  • 问题是,Heroku使用非默认的bytea_output 。 所以解决这个问题的方法是 SET bytea_output = 'hex'; 在运行查询之前 The problem is, that Heroku uses a non-default bytea_output. So a workaround to deal with this was SET bytea_output = 'hex'; before running the query
  • 您可能需要括号,因为AND具有运算符优先级。 SELECT * FROM posts WHERE ( title LIKE 'term%' OR NAME LIKE 'term%' ) AND post_type != 'type'; 因为你现在没有括号 SELECT * FROM posts WHERE title LIKE 'term%' OR ( NAME LIKE 'term%' AND post_type != 'typ ...
  • 您的查询使用MySQL扩展,允许select列不在group by 。 您可以通过将所有此类列包装在聚合函数(如max()来修复查询: SELECT r.studno, r.sdate, r.subject, sum(exam1) as exam1,sum(exam2) as exam2,sum(asgn1) as asgn1,sum(asgn2) as asgn2, sum(proj1) as proj1,sum(proj2) as proj2,sum(pract1) as p ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)