Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sTNfY-00FewW-Gi for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jul 2024 15:31:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sTNfW-00B6sV-8O for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jul 2024 15:31:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sTNfV-00B6sN-Um for pgsql-hackers@lists.postgresql.org; Mon, 15 Jul 2024 15:31:13 +0000 Received: from mail-il1-x133.google.com ([2607:f8b0:4864:20::133]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sTNfT-002BbC-Lf for pgsql-hackers@lists.postgresql.org; Mon, 15 Jul 2024 15:31:12 +0000 Received: by mail-il1-x133.google.com with SMTP id e9e14a558f8ab-37613975e20so20470155ab.2 for ; Mon, 15 Jul 2024 08:31:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721057471; x=1721662271; darn=lists.postgresql.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=AsSqr6+sg4GNBhCtcAI7cKR6V4w+Xpcg57PLg0LzdmU=; b=kVGLdVom41kTvgeDfDgS0rb6CSoLoLYAU3VCWi5POCoNzk98Lfy0wlJts7nwfGFGFy YJIDJN4Et1tbedewrkPqs8ED2WkgKug0VIHs8OSBINNv3re12a3kVBcXClha1IpfIDxt SxrEj+sxk0UnzBP7N5wt8YTN33VFgRljUmywyEU4aLJcK8aA3SxjiEsq4ZHNhM5iM2xV BBi7IgLIT+QSrHEixIdux0IKrHbKQ7YYqL83Lfn0lTGZ97wtlrfTMTttuOanZ5dDzWci O/NYpSSuGdEbnCRYjmwQSR6EY8XweIHBgCXcqGNmUmQ3EPR/IxPjSQw4N92H5UgxalFC pcaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721057471; x=1721662271; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=AsSqr6+sg4GNBhCtcAI7cKR6V4w+Xpcg57PLg0LzdmU=; b=P/nhiMagWOOPKNzT/yEDmVr+lViy3an+9LQZ6zSE/Hf9wN3Iejxz2bxmcTwMHNr1+l mxE3wTG5wxbB+OFRZ8s6HlURNU6IGxO5KkopUpDBw+WXYAc9Spmp3ITogYeIPJFuuNbW rvqDbLJxn9QTUefCGiQz7EpHaCQi6Jg2y1AKf33KgQNBkqQr1VvzsMX4aaV7dmcSwmrV smH3FlRj5ufdMJM3sgi+aORbc6ZQ/GIwRRKe/VcimgGWjJuK7PJESvdPoYITTY8Z7qdV DFyIdPvMtgUO6mtJPmrO0bKnKESynYHIOp9a41A6uM+qK+mk6tjOgPmVDvMVUvJ0AihX R0Tw== X-Forwarded-Encrypted: i=1; AJvYcCVePrR0kYVmwRZm46s04oGKlWNHYqrQjXrZD6Cr5DnEtXZ3tBQl71gac4Ld+7Othqt6/FTViT5+m4rFw8tH6AjO0wef+Ez+4ULGHAduCAx05H2z X-Gm-Message-State: AOJu0Yw7Xrwe5348Q17WvmBY2RruCYRmN8HpSzzAFSgKQf5mo1p5ui0n 3ZeBS12ICqU2r4dS6m5kkq0LYPullPsEdawt59BpcWW8SNgZRlTax2pDag== X-Google-Smtp-Source: AGHT+IHruUKYEefOcbqEDEpv2GDUgzaP7WKz00EwHuSi4SaU93kRJ2t4G2shHKJ6o5SgYQUCer2XUA== X-Received: by 2002:a92:c56a:0:b0:375:c296:bf90 with SMTP id e9e14a558f8ab-3939f0ce617mr1753735ab.7.1721057470811; Mon, 15 Jul 2024 08:31:10 -0700 (PDT) Received: from nathan (162-195-168-172.lightspeed.stlsmo.sbcglobal.net. [162.195.168.172]) by smtp.gmail.com with ESMTPSA id e9e14a558f8ab-3900f5280eesm16948585ab.31.2024.07.15.08.31.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jul 2024 08:31:10 -0700 (PDT) Date: Mon, 15 Jul 2024 10:31:08 -0500 From: Nathan Bossart To: Joseph Koshakow Cc: Alexander Lakhin , Tom Lane , PostgreSQL Hackers , Andres Freund Subject: Re: Remove dependence on integer wrapping Message-ID: References: <618777.1717984674@sss.pgh.pa.us> <31ad2cd1-db94-bdb3-f91a-65ffdb4bef95@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk I took a closer look at 0002. + if (unlikely(isinf(f) || isnan(f))) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("invalid float value"))); + + fresult = rint(f * c); + if (unlikely(f == 0.0)) + ereport(ERROR, + (errcode(ERRCODE_DIVISION_BY_ZERO), + errmsg("division by zero"))); + if (unlikely(isinf(f) || isnan(f))) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("invalid float value"))); + + fresult = rint(c / f); I'm curious why you aren't using float8_mul/float8_div here, i.e., fresult = rint(float8_mul((float8) c, f)); fresult = rint(float8_div((float8) c, f)); nitpick: I'd name the functions something like "cash_mul_float8" and "cash_div_float8". Perhaps we could also add functions like "cash_mul_int64" and "cash_sub_int64" so that we don't need several copies of the same "money out of range" ERROR. -- nathan