質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1542閲覧

C++の丸め込み後の値が異なる

ruei

総合スコア284

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/01/22 22:12

編集2020/01/22 22:12

C++の次のコードを動かすと1974と1973という異なる結果が得られます(前者が正しいです)。内部では1973.999999...という値になってるのではと思っているのですが、原因の分かる方いらっしゃらないでしょうか。

C++

1// This file is a "Hello, world!" in C++ language by GCC for wandbox. 2#include <iostream> 3#include <cstdlib> 4 5int main() 6{ 7 double n=0.2820; 8 double m=7000; 9 std::cout<<n*m<<std::endl; 10 std::cout<<int(n*m)<<std::endl; 11} 12 13// GCC reference: 14// https://gcc.gnu.org/ 15 16// C++ language references: 17// https://cppreference.com/ 18// https://isocpp.org/ 19// http://www.open-std.org/jtc1/sc22/wg21/ 20 21// Boost libraries references: 22// https://www.boost.org/doc/ 23

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

浮動小数点誤差です。
nもn*mも浮動小数点数であり、浮動小数点数はすべての実数を正確に表現することはできません。

投稿2020/01/22 22:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Pythonで試した結果です。

text

1Python 3.7.6 (default, Jan 8 2020, 19:59:22) 2Type 'copyright', 'credits' or 'license' for more information 3IPython 7.11.1 -- An enhanced Interactive Python. Type '?' for help. 4 5In [1]: n=0.2820 6 7In [2]: m=7000 8 9In [3]: n*m 10Out[3]: 1973.9999999999998 11 12In [4]: int(n*m) 13Out[4]: 1973 14 15In [5]:

intにキャストすることで、少数部分が切り捨てられます。
1974(1973.9999999999998)については切り上げではなく四捨五入かも?・・・未検証
参考:浮動小数点数型と誤差
【C++】小数点の桁数を指定する方法と注意点【cout/iostream】

投稿2020/01/22 22:24

編集2020/01/22 22:49
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/01/22 22:57 編集

「未検証」・・・コンパイラの仕様を確認していない++; ついでにclang10.0の結果↓ usr ~/Project/test % ./a.out 1974 1973 usr ~/Project/test % "c++ double 丸め誤差"で検索すると色々出てきますv^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問