• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:見えない浮動小数点演算誤差?)

見えない浮動小数点演算誤差に困惑しています

chayamatiの回答

  • chayamati
  • ベストアンサー率41% (254/605)
回答No.12

今晩は >D3セルに =B3-C3=0 と入れるとFALSEが返ります。 ★セルに=1/3と入力して表示形式をユーザ定義で 「.####################」と #を20くらい並べて下さい  結果3は16個並びこれ以下の値は表示されないようですね  ご存知と思いますが数値の 元は2進数ですね  そこで、D3に2の32乗または2の64乗を掛けて下さい   E3=D3*2^32   F3=D3*2^64  何か有効数値が表示されますか

emaxemax
質問者

お礼

ありがとうございます。 >D3に2の32乗または2の64乗を掛けて下さい このD3は、=B3-C3=0 が入ってるセルですか?ならば0です。 D3に=1/3を入れたのであれば、1431655765 です。

関連するQ&A

  • エクセル浮動小数点演算誤差?が見えない

    エクセル2010です。 BOOK-AのシートBのE7セルに0.822という数値が入っています。 見た目も、数式バー上も0.822です。 BOOK-BのシートCのE7セルにも0.822という数値が入っています。 見た目も、数式バー上も0.822です。 ところがこれを =[B.xlsm]Sheet1!E7=E7 で比較すると、falseが返ります。 これまで浮動小数点演算誤差で、見た目がおなじでも小数点以下かなり下の方で違いケースは経験していましたが、その場合でも小数点以下の表示を20位くらいまで表示させると違いが表れました。ところが今回は小数点以下30位まで表示させても0.822000000000000000000000000000で誤差が見えません。でもfalseになります。 こんなことってあるんでしょうか?

  • 浮動小数点演算を固定小数点演算へ変換する

    あるプログラムの処理を高速化するために浮動小数点数を固定小数点数に変換したいので、皆様の力を貸してください。 以下のようなプログラムがあります。 ------------------------------------------------------------- #define A 0.105 int main(){ double y; double a,b; double t1,t2 t1 = A * a; t2 = t1 * t1; y = t2 * b; printf("y = %lf\n",y); return 0; } ------------------------------------------------------------- a,bが入力でそれぞれ0~6000,0~0.004の値を取ることが分かっています。また、yは出力であり許容誤差は3以下となっています。 上記のプログラムを固定小数点数で記述しなおすとどのようになりますか。 各変数の型はshortでお願いします。

  • 小数点も含む値の比較

    formで送信する値をOnClick時にjsで確認してから送信するプログラムを作っています。 値aと値bを比較して、bがaより大きかったらエラーを表示してfalseを返したいです。 上記の動き自体はできてるのですが、比較部分ができません。 値a,bには、小数2桁まで(小数がない場合もある)が入力されます。 function data_entry(){ if(document.test_form.a.value <= document.test_form.b.value){ alert("Bの値にA以上の値は入力できません"); return(false); } } という感じで比較したいです。 これだと結果は(if文自体の評価結果) a=1 b=1 TRUE(期待通り) a=10 b=1 FALSE(期待通り) a=10 b=2 TRUE(ダメ) a=18 b=7 TRUE(ダメ) a=18 b=17 FALSE(期待通り) a=28 b=7 TRUE(ダメ) a=28 b=2 FALSE(期待通り) という感じです。 js初心者です。 よろしくお願いしますm(__)m

  • エクセル浮動小数点の問題?

    添付画像のような表があります。 A1:A5には数値が入力してあります。 1つずつ中を確認し、表示通りであることを確認しています。 D1セルは =ROUNDDOWN(20000/640800,2)+0.005 の数式で、0.035が表示されています。 D3セルは =D1=A4 の数式でTRUEが表示されています。 D5セルは =VLOOKUP(D1,A1:B5,2,FALSE) の数式で #N/Aエラーが返っています。 たぶん、エクセル特有の浮動小数点の問題ではないかとあたりをつけ、 D5セルを =VLOOKUP(ROUND(D1,3),A1:B5,2,FALSE) に変えると、ちゃんと4が返りました。 でも、そうだとすると、=D1=A4の数式でTRUEが返るのはなぜですか? ROUND(D1,3)としないとA4とマッチしないのですから、=D1=A4の式はFALSEが返るはずですよね?

  • 浮動小数点型データの誤差

    doubleなどの浮動小数点型の数値を値渡しで関数に渡したとき、内部表現は変わらないことは保証されていますか? double g_d; void func(double d) { assert(d==g_d); // これは保障されている? } void main() { g_d=1.23; func(g_d); } 似たような話で、異なるコンテキストで定義した同じ数値は必ず同じ内部表現を持つのか気になります。 class Class1 { double d=1.23; }; class Class2 { double d=1.23; }; void main() { Class1 c1; Class2 c2; assert(c1.d==c2.d); //これはどのような処理系でもOK? } Class1とClass2が異なるコンパイル単位に定義されている場合はどうでしょうか?もちろんこのような比較はしないのがベターだとは思いますが、古いコードに多く残っていて修正すべきかどうかなと。 クラスや構造体のメンバの場合、パディングのような処理系依存のややこしい話もあるので気になります。

  • format 関数 小数点を消す方法

    VBAで新しいBOOKを追加した後に 元のBOOKから通貨単位のデータをセル範囲指定でいっきに 追加したBOOKに貼り付けています。 その時に元のデータは少数点を表示していないに 貼り付けられたデータでは2位まで表示されしまいます。 Workbooks(strBname).Sheets("Sheet1").Range("H4" & ":" & "H" & lastR).Value = Workbooks("【販売代行】支払明細書作成_ver1.00.xls").Sheets("販売委託店舗一覧 ").Range("X4" & ":" & "X" & lastR).Value 上記のような形で設定しています。 小数点を無くす方法を教えていただきたいです。 よろしくお願いします。

  • マクロ変数 single で小数点計算が狂います

    Windows8.1 エクセル2010です。 マクロを使っており、小数点の計算をしたいため、初めてsingle double の変数を使いました。 例として、 Sub シングル() Dim 足される As Single Dim 足す As Single Dim 合計 As Single 足される = Range("a1").Value 足す = Range("b1").Value 合計 = 足される + 足す Range("c1").Select ActiveCell.FormulaR1C1 = 合計 End Sub A1=2.1 B1=5.1 普通は7.2となるのですが、7.19999980926513 と出ました。 doubleに変数を切り替えたら、ちゃんと7.2と出ました。 singleの仕組みがよくわかりません。 有効桁数数は「7桁」なら、小数点第7位まで扱える…という単純なものではないのでしょうか?

  • マクロで小数点以下の桁数を変更

    シート内に複数のグラフがあり、 あるセルに数字を入れてマクロを実行するとグラフの最大値と最小値とレンジが変わるように してあります。下のマクロです。 ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Axes(xlValue).Select With ActiveChart.Axes(xlValue) .MinimumScale = Range("W8").Value .MaximumScale = Range("W7").Value .MinorUnit = Range("W9").Value .MajorUnit = Range("W10").Value .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With これに仕様追加したいのが、小数点以下の桁数を任意に変更したい、と言うことです。 通常が5だとすると、マクロ実行で5.0、5.00、5.000など。 小数点以下1桁なら"1"とか入力して変更できれば一番良いかなと思っております。 まだ初心者のため、情報不足がありましたらすぐに補足しますので、 なんとか宜しくお願いします。

  • エクセルVBAで少数点を切り捨てる方法

    エクセルVBAであるbookのセルに(=A1*0.05)というような税額を取得するための関数が入っており、 それを Workbooks(strBname).Sheets("Sheet1").Range("A" & i).Value = Workbooks(thisWB).Sheets(mainScr).Range("A" & ii).Value のように別ブックに出力するコードを書いているのですが、 Nunberlocalを使用しても表示上は小数点を表示していないのですが セルを選択すると小数点が消えていません。 完全に少数点を切り捨てる方法はあるでしょうか?

  • VBの小数点周り

    以前から思っていたのですが、VBの小数点ってあやしくないですか? 変な現象を見つけたので、知っている方がいたら教えていただきたいのです。 小数点以下、四捨五入をしようと思い、 c = fix(val(a)+val(b)) という、式に対して、a = 20,b = 76.80 と、入れたところ、c = 1536 となるはずなのですが、返ってきた値は c = 1535 でした。 fixかけてるのに、値が減ってしまうなんてことがあるのでしょうか?? 意味不明な現象に戸惑っております。