Thread

  1. Re: BUG #18976: -0.0 with float8 will be transformed to 0 inprepare statement but not in normal execution

    ZhangChi <798604270@qq.com> — 2025-07-03T12:30:40Z

    hi,
    
    
    Thank you for your reply!
    
    
    I’m wondering—since the parameter has already been specified as float8&nbsp;in the PREPARE&nbsp;statement, why is it still necessary to convert it to float8&nbsp;again during EXECUTE?
    
    
             原始邮件
             
           
    发件人:Laurenz Albe <laurenz.albe@cybertec.at&gt;
    发件时间:2025年7月3日 20:23
    收件人:798604270 <798604270@qq.com&gt;, pgsql-bugs <pgsql-bugs@lists.postgresql.org&gt;
    主题:Re: BUG #18976: -0.0 with float8 will be transformed to 0 inprepare statement but not in normal execution
    
    
    
           On&nbsp;Thu,&nbsp;2025-07-03&nbsp;at&nbsp;03:03&nbsp;+0000,&nbsp;PG&nbsp;Bug&nbsp;reporting&nbsp;form&nbsp;wrote:
    &gt;&nbsp;The&nbsp;following&nbsp;bug&nbsp;has&nbsp;been&nbsp;logged&nbsp;on&nbsp;the&nbsp;website:
    &gt;&nbsp;
    &gt;&nbsp;Bug&nbsp;reference:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18976
    &gt;&nbsp;Logged&nbsp;by:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chi&nbsp;Zhang
    &gt;&nbsp;Email&nbsp;address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;798604270@qq.com
    &gt;&nbsp;PostgreSQL&nbsp;version:&nbsp;18beta1
    &gt;&nbsp;Operating&nbsp;system:&nbsp;&nbsp;&nbsp;Ubuntu&nbsp;24.04&nbsp;and&nbsp;docker
    &gt;&nbsp;Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &gt;&nbsp;
    &gt;&nbsp;The&nbsp;value&nbsp;-0.0&nbsp;with&nbsp;float8&nbsp;is&nbsp;transformed&nbsp;to&nbsp;0&nbsp;in&nbsp;prepared&nbsp;statements&nbsp;but
    &gt;&nbsp;remains&nbsp;-0&nbsp;in&nbsp;normal&nbsp;execution.&nbsp;Although&nbsp;0&nbsp;and&nbsp;-0&nbsp;are&nbsp;numerically&nbsp;equal,
    &gt;&nbsp;this&nbsp;discrepancy&nbsp;can&nbsp;lead&nbsp;to&nbsp;subtle&nbsp;bugs&nbsp;in&nbsp;certain&nbsp;cases—for&nbsp;example,&nbsp;when
    &gt;&nbsp;the&nbsp;value&nbsp;is&nbsp;cast&nbsp;to&nbsp;a&nbsp;VARCHAR,&nbsp;as&nbsp;illustrated&nbsp;below.
    &gt;&nbsp;
    &gt; PREPARE&nbsp;prepare_query&nbsp;(float8)&nbsp;AS&nbsp;SELECT&nbsp;CAST($1&nbsp;AS&nbsp;VARCHAR)&nbsp;=
    &gt;&nbsp;CAST(-0.0::float8&nbsp;AS&nbsp;VARCHAR);
    &gt;&nbsp;EXECUTE&nbsp;prepare_query(-0.0);&nbsp;--&nbsp;f
    
    That's&nbsp;not&nbsp;a&nbsp;bug,&nbsp;but&nbsp;a&nbsp;pilot&nbsp;error.&nbsp;&nbsp;If&nbsp;you&nbsp;feed&nbsp;a&nbsp;"float8",&nbsp;the&nbsp;result&nbsp;ist&nbsp;TRUE:
    
    EXECUTE&nbsp;prepare_query(-0.0::float8);
    
    &nbsp;?column?&nbsp;
    ══════════
    &nbsp;t
    (1&nbsp;row)
    
    Yours,
    Laurenz&nbsp;Albe